1.1 Spring如何简化Java开发?
- DI:依赖注入,自动化构建对象
- AOP:面向切面的编程,如日志、安全、事务管理
- 模板技术消除样板式代码:如JdbcTemplate
1.2 bean容器
两个容器:BeanFactory和ApplicationContext,主要用后面的。
应用上下文:从某某配置文件中加载上下文环境。
2.1 spring配置的几种方案
三种方案可以混合使用,推荐使用自动装配、其次是java配置、最后是xml。
显式的配置指的是,专门有个配置类或者xml?自动装配是对有@Component注解的类自动注册bean
2.1.1 自动装配
POJO上标注@Component
,POJO的同目录下创建xxxconfig类,标注@ComponentScan
。默认会扫描@ComponentScan
标注类目录及其子包下的@Component
类,并创建bean。@ComponentScan
可以用xml来配:
使用时使用@Autowired
注解自动装配bean到你的测试代码中:
3.1 环境与profile
可以将bean归在不同profile下,当某一profile激活时,才创建其下的bean,其他profile的bean不会被创建。未被归类的bean默认均创建。
3.2 条件化bean
@Conditional(实现了Condition接口的类)
根据Condition接口的方法返回的boolean确定是否创建注解的bean
实现了Condition接口的类:
3.3 处理自动装配的歧义性
@autowired按照类型匹配,比如自动装配一个类或其子类,一个接口的任意实现。这样就会出现歧义性。
1. 标识首选bean
为了缩小范围,可以使用@Primary注解,标注在类上或javaConfig的bean方法上,指明当出现歧义时如何选择:选择标注了这个注解的bean注入。
但如果有多个@Primary,那还是会歧义。
2. 限定自动装配的bean
为了进一步缩小范围,确定唯一bean,可以使用@Qualifier注解,按照bean的限定符进行匹配。默认限定符是beanID,由于beanid唯一,可以确定唯一bean。
创建自定义的限定符**
但是beanID与类名紧耦合,因此可以指定自定义限定符:类上或javaConfig方法上加@Qualifier(“限定符”)标注bean的自定义限定符。
指定:
使用:
注意到:@Qualifier可以用来匹配bean,也可以设定bean的限定符
使用自定义限定符注解
为了保持多态又能确定唯一注入的bean,可以使用自定义限定符注解。
通常为一类bean的共性:@cold,@fruity等
定义注解:都加上了@Qualifier注解
给bean添加注解:可叠加使用
匹配时:可叠加使用