Spring6 (1) IOC

目录

1 环境要求

2 准备工作

2.1 引入Spring相关依赖

2.2 Spring配置文件(.xml)

3 IOC

3.1 IOC实现

3.1.1 ApplicationContext的主要实现类

3.1.3.1 ClassPathXmlApplicationContext

3.1.3.2 AnnotationConfigApplicationContext

3.2 依赖注入DI(Dependency Injection)

3.3 注解开发

3.3.1 开启组件扫描

3.3.2 创建对象注解

3.3.3 依赖注入的注解

3.4 全注解开发


1 环境要求

        (1) IDEA开发工具: 2022.3.3

        (2) JDK: Java17+

        (3) Maven: 3.6+

        (4) Spring: 6+

2 准备工作

2.1 引入Spring相关依赖


	
	
		org.springframework
		spring-context
		6.0.11
	

	
	
		org.junit.jupiter
		junit-jupiter-api
		5.10.0
	

	
	
		org.slf4j
		slf4j-api
		1.7.13
	
	
	
		ch.qos.logback
		logback-core
		1.2.3
	
	
		ch.qos.logback
		logback-classic
		1.2.3
	

2.2 Spring配置文件(.xml)




    
    

	
	  
          
          
	

    
    
        
        
        
        
        
    

3 IOC

        底层核心原理JAVA反射

        IOC(Inversion Of Control)控制反转(创建对象不再时通过new,而是交给IOC容器)

        Spring通过IOC容器来管理所有JAVA对象的实例化和初始化控制对象与对象之间的依赖关系,这些由IOC容器管理的JAVA对象称为Spring Bean(它与由关键字new创建的JAVA对象没有任何区别)

3.1 IOC实现

3.1.1 ApplicationContext的主要实现类

        BeanFactory是IOC容器的基本实现,是Spring内部使用的接口,不向开发人员提供

        ApplicationContext是BeanFactory的子接口,提供了更多高级特性,面向开发者(几乎所有场合都可以使用ApplicationContext,而不是更底层的BeanFactory)

实现类 简介
ClassPathXmlApplicationContext 通过读取类路径下的xml配置文件创建IOC容器对象
AnnotationConfigApplicationContext 通过读取配置类创建IOC容器对象

3.1.3.1 ClassPathXmlApplicationContext

@Test
public void userTest() {
	// 加载spring配置文件,创建"容器对象"
	ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
	// 从容器中获取对应的对象
	User user = context.getBean("user", User.class);
	// 使用对象
	user.aaa();
}

3.1.3.2 AnnotationConfigApplicationContext

@Test
public void userTest() {
	// 加载spring配置类,创建"容器对象"
	ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
	// 从容器中获取对应的对象
	User user = context.getBean("user", User.class);
	// 使用对象
	user.aaa();
}

3.2 依赖注入DI(Dependency Injection)

        在Spring创建对象过程中,注入对象依赖的属性:

                (1) set注入: 有空参构造方法,和对应的set方法

                (2) 构造注入: 有对应的构造方法

                (3) 注解注入: 有空参构造方法

3.3 注解开发

3.3.1 开启组件扫描

3.3.2 创建对象注解

        被注解的类必须有空参构造方法

        这些注解不能写在接口上,要写在类上

注解 说明
@Component 默认使用类名(首字母小写)
@Controller 通常用于控制层,功能与@Component相同
@Service 通常用于业务层,功能与@Component相同
@Repository 通常用于数据访问层,功能与@Component相同

3.3.3 依赖注入的注解

注解 说明
@Autowired

根据类型去IOC容器匹配类/类的子类/接口实现类

@Qualifier("名称")

要配合@Autowired使用

根据类型名称去IOC容器进行匹配

@Value("值")("${key}")

基本数据类型和String类型

不能用作静态变量(static),不能用作常量(final)

3.4 全注解开发

        用配置类来替代xml配置文件

注解

说明

@Scope("singleton/prototype")

用于指定bean对象的作用范围(默认singleton)

可以用在配合@Component等注解,也可以配合@Bean注解

@Bean

方法的返回值作为Bean交给SpringIOC容器管理

如果方法需要参数,会从IOC容器获取(默认按类型注入/多个匹配按形参名注入)

@Configuration  //配置类注解
@Import({JdbcConfig.class,TransactionConfig.class})  //引入其他配置类
@ComponentScan("xyz.aboluo")  //开启组件扫描(配置类也要在其中)
@PropertySource(value = "config.properties", encoding = "utf-8")  //引入properties文件
@EnableAspectJAutoProxy  //开启Spring对”注解AOP”的支持
@EnableTransactionManagement  //开启Spring对”注解事务”的支持(需要有对应的"事务管理器"交给SpringIOC容器)
public class SpringConfig {
}

你可能感兴趣的:(#,Spring,java,spring)