1.1 Spring如何简化Java开发?

  1. DI:依赖注入,自动化构建对象
  2. AOP:面向切面的编程,如日志、安全、事务管理
  3. 模板技术消除样板式代码:如JdbcTemplate

1.2 bean容器

两个容器:BeanFactory和ApplicationContext,主要用后面的。
应用上下文:从某某配置文件中加载上下文环境。
image.png

2.1 spring配置的几种方案

三种方案可以混合使用,推荐使用自动装配、其次是java配置、最后是xml。
显式的配置指的是,专门有个配置类或者xml?自动装配是对有@Component注解的类自动注册bean
image.png

2.1.1 自动装配

POJO上标注@Component,POJO的同目录下创建xxxconfig类,标注@ComponentScan。默认会扫描@ComponentScan标注类目录及其子包下的@Component类,并创建bean。
@ComponentScan可以用xml来配:image.png
使用时使用@Autowired注解自动装配bean到你的测试代码中:
image.png

3.1 环境与profile

可以将bean归在不同profile下,当某一profile激活时,才创建其下的bean,其他profile的bean不会被创建。未被归类的bean默认均创建。

创建profile

激活profile**

3.2 条件化bean

@Conditional(实现了Condition接口的类)
根据Condition接口的方法返回的boolean确定是否创建注解的bean
image.png
实现了Condition接口的类:
image.png

3.3 处理自动装配的歧义性

@autowired按照类型匹配,比如自动装配一个类或其子类,一个接口的任意实现。这样就会出现歧义性。

1. 标识首选bean

为了缩小范围,可以使用@Primary注解,标注在类上或javaConfig的bean方法上,指明当出现歧义时如何选择:选择标注了这个注解的bean注入。
但如果有多个@Primary,那还是会歧义。

2. 限定自动装配的bean

为了进一步缩小范围,确定唯一bean,可以使用@Qualifier注解,按照bean的限定符进行匹配。默认限定符是beanID,由于beanid唯一,可以确定唯一bean。

创建自定义的限定符**
但是beanID与类名紧耦合,因此可以指定自定义限定符:类上或javaConfig方法上加@Qualifier(“限定符”)标注bean的自定义限定符。

指定:
image.png
image.png
使用:
image.png

注意到:@Qualifier可以用来匹配bean,也可以设定bean的限定符

使用自定义限定符注解
为了保持多态又能确定唯一注入的bean,可以使用自定义限定符注解。
通常为一类bean的共性:@cold,@fruity等

定义注解:都加上了@Qualifier注解

image.png

给bean添加注解:可叠加使用
image.png

匹配时:可叠加使用
image.png