一、自动装配 bean
配置文件自动装配的四种方式:
1. byName
2. byType
当 Spring 检查到有多个 bean 符合指定类型时,设置 primary = "false" 表示该 bean 不是候选 bean,但是默认是 true
还可以设置 autowire-candidate = “false”,以在自动装配时忽略该 bean 作为候选 bean
3. constructor
constructor 与 byType 具有相同的局限性
4. autodetect
先通过构造器装配,如果没有匹配的 bean 则再通过 byType 匹配
5. 定义默认自动装配
默认的优先级低于 bean 本身设置的优先级
注:同一个 bean 配置中不能同时使用 constructor 装配和 <constructor-arg>元素
二、使用注解装配
1. 启用注解
2. @Autowired
@Autowired 注解不仅可以写在 setter 方法上,属性上,还可以写在需要自动装配 bean 的任意方法上,也包括构造方法。
@Autowired(required = "false") 可以设置 required 属性,指定自动装配是否可选。
@Qualifier("beanName") 指定自动装配时选择的 bean,当有多个 bean 满足自动装配时
自定义 Qulifier 注解
3. @Inject
@Named 相当于 Spring 的 @Qulifier
4. 在注解中使用表达式
@Value 用来设置 String 类型和基本数据类型的值,可以结合 SpEL 使用
三、自动检测需要注册到 Spring 上下文中的 bean
1. 为自动检测标注 bean
2. 过滤扫描
四、使用 Spring 基于 Java 的配置
使用 @Configuration 注解 Java 类相当于 XML 文件的 <beans> 元素, @Bean 相当于 XML <bean> 元素
@Configuration
public class Beans {
@Bean
public MyBean myBeanId(){
MyBean mb = new MyBean();
// 方法体内可以实现想要的逻辑,比如引用其它 bean
mb.setMyBean2(myBeanId2);
return mb;
}
@Bean
public MyBean2 myBeanId2(){
return new MyBean();
}
}