IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 细说spring IOC三种开发模式 -> 正文阅读

[Java知识库]细说spring IOC三种开发模式

1. 基于Xml 元数据模式(XML-based metadata)

1.1开发环境搭建(基于maven)
a.在pom文件中引入IOC核心依赖

<!--  IOC 核心jar,引入该jar可以使用springIOC 90%的功能      -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.23</version>
        </dependency>

b.在类路径下创建spring.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

c.添加需要托管的JavaBean:

package cn.shanxincd.ih.service;

/**
 * @ClassName UserService
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/11/1 17:48
 * @Version 1.0
 */
public class UserService {

    public void sayHello(String name){
        System.out.println("向"+name+"问好");
    }
}

d.注册javaBean到spring容器中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      <beans>
          <bean id="userService" class="cn.shanxincd.ih.service.UserService">

          </bean>

      </beans>
</beans>

e.创建测试类测试

package cn.shanxincd.ih.test;

import cn.shanxincd.ih.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @ClassName XmlContainerTest
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/11/1 17:54
 * @Version 1.0
 */
public class XmlContainerTest {
    public static void main(String[] args) {
      ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("spring.xml");
        UserService userService = (UserService) ct.getBean("userService");
        userService.sayHello("张三");

    }

}

在这里插入图片描述
上面一个简单的入门已经实现了spring IOC基本的功能(将对象的管理交给spring容器,在使用时从spring容器中获取Bean实例)

2. 基于注解的配置( Annotation-based configuration)

2.1在开发模式1的基础上,在spring.xml中添加context的命名空间和约束,并添加开启注解扫描和包扫描(context:annotation-config</context:annotation-config>可以省略,spring5.0中已经和context:component-scan合并,添加包扫描即可)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="cn.shanxincd.ih"/>

          <bean id="userService" class="cn.shanxincd.ih.service.UserService">
          </bean>


</beans>

2.2添加JavaBean,通过@Component将该bean注册到spring容器中

package cn.shanxincd.ih.service;

import org.springframework.stereotype.Component;

/**
 * @ClassName UserService
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/11/1 17:48
 * @Version 1.0
 */
@Component
public class UserService2 {

    public void sayHello(String name){
        System.out.println("UserService2 sayHello() 向"+name+"问好");
    }
}

2.3测试调用

package cn.shanxincd.ih.test;

import cn.shanxincd.ih.service.UserService;
import cn.shanxincd.ih.service.UserService2;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @ClassName XmlContainerTest
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/11/1 17:54
 * @Version 1.0
 */
public class XmlContainerTest {
    public static void main(String[] args) {
      ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("spring.xml");
        UserService userService = (UserService) ct.getBean("userService");
        userService.sayHello("张三");

        System.out.println("通过注解管理的Bean测试======================");

        UserService2 userService2 = (UserService2) ct.getBean("userService2");
        userService2.sayHello("李四");



    }

}

在这里插入图片描述

3. 基于Java config(Java-based configuration)

基于Java config的IOC开发,可以完全摆脱xml配置,改为完全由Java代码替代,这也是最简洁的一种IOC开发模式,强烈推荐
3.1将spring.xml配置文件删除或者修改后缀名称,不删除也可,应为这种模式下spring的启动容器和xml模式下spring的启动容器不是同一个,不会影响
3.2新建spring配置类:AppConfig.java,该类添加@Configuration和包扫描注解@ComponentScan

package cn.shanxincd.ih.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

/**
 * @ClassName AppConfig
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/10/21 15:27
 * @Version 1.0
 */
@Configuration
@ComponentScan(value = "cn.shanxincd.ih")
public class AppConfig {
  

}

3.3将要托管给spring容器的JavaBean添加注解(@Repository、@Service、@Controller、@Component)

package cn.shanxincd.ih.service;

import org.springframework.stereotype.Service;

/**
 * @ClassName UserService
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/11/1 17:48
 * @Version 1.0
 */
@Service
public class UserService {

    public void sayHello(String name){
        System.out.println("向"+name+"问好");
    }
}


3.4添加测试类测试调用

package cn.shanxincd.ih.test;

import cn.shanxincd.ih.config.AppConfig;
import cn.shanxincd.ih.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @ClassName ContainerTest
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/10/20 15:31
 * @Version 1.0
 */
public class ContainerTest {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = applicationContext.getBean(UserService.class);
        userService.sayHello("张三");

    }
}

使用AnnotationConfigApplicationContext类,将配置类传入AnnotationConfigApplicationContext构造器中执行spring注解容器启动操作

4.三种模式混合使用

4.1保留xml模式下spring.xml配置文件,在模式3的AppConfig配置类中引入spring.xml配置文件:@ImportResource(“classpath:spring.xml”)
4.2如果是在配置类中进行包扫描则在配置类中使用@ComponentScan(value = “cn.shanxincd.ih”)即可,如果是在配置文件中进行包扫描则在spring.xml中添加<context:component-scan base-package=“cn.shanxincd.ih”/> 标签即可,这两种方式任选其一即可;base-package中的字符串是要扫描的包名,使用中尽量缩小包扫描的范围,这样能提高程序执行的效率

package cn.shanxincd.ih.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

/**
 * @ClassName AppConfig
 * @Description TODO
 * @Author @yangfeng
 * @Date 2022/10/21 15:27
 * @Version 1.0
 */
@Configuration
@ComponentScan(value = "cn.shanxincd.ih")

/**
 * @ImportResource 可以引入xml到配置文件中
 **/
@ImportResource("classpath:spring.xml")
@MapperScan("cn.shanxincd.ih.mapper")
public class AppConfig {
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:12:25  更:2022-11-05 00:18:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/30 13:26:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码