1:可选的自动装配 @Autowired具有强契约特征,其标注的属性或者参数必须是可装配的 如果没有bean可装配,那么自动装配会失败,抛出NoSuchBeanDefinitionException
当然,属性并不一定非要装配。null值也是可接受的。这样的话通过设置@Autowired(required=false)来配置自动装配时可选的 如果没有找到对应的Bean,那么相应的属性就是null,不会报错
当@Autowired标注在构造器上时,只能由一个的requeired属性为true,其他的只能是false,而且当标注多个构造器的时候。Spring会挑选满足条件的构造器中入参最多的那一个
2:限定歧义性的依赖 当满足条件的bean大于两个的时候,@Autowired并不知道选择哪一个。这个时候我们可以使用:@Qualifier(“name”)来明确的指定Id为name的Bean,Qualifiler这样就可以真正的缩小挑选范围。
事实上可以自定义限定器的注解(Qualifier)
<!-- lang: java -->
@Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface sudojs(){
}
这样既可以用@sudojs来限定范围了,如果还嫌不够,继续定义,接续缩小范围
但是凡事有个度,@Autowired注解本身是减少XML文件配置的一种替代方式。但是使用它的类会引入对Spring的特定依赖(即便这种依赖只是一个注解)
那么我们可以使用Java依赖注入标准(JSR-330)中 @Inject