--------------- @Autowired 知识点 -------------------
1、 <context:component-scan>还会自动注册AutowiredAnnotationBeanPostProcessor实例,
该实例可以自动装配具有@Autowired,@Resource和@Inject注解的属性
2、 @Autowired可以修饰类、字段,还可以修饰setter方法,要在xml文件中配置好bean,才能自动装配
@Autowired
private UserService userService;
private Address a1;
@Autowired
public void setA1(Address a1) {
this.a1 = a1;
}
3、 当@Autowired找不到bean时,会抛出异常,中断程序。设置@Autowired(required=false),
会给变量赋一个null值,程序就不会中断了。如果bean存在的话,还是照常实例化bean
4、 默认情况下,当IOC容器里存在多个类型兼容的Bean时(即多态),通过类型的自动装配(@Autowired)将无法工作,
此时可以在@Qualifier注解里提供Bean的名称,@Qualifier("xml中bean的名称(注意:大小写敏感!!)")。Spring允许对方法的参数标注@Qualifier以
指定注入的Bean的名称。
或者,给@XXX注解添加 (value="指定bean名称"),然后添加@Qualifier("同一个bean名称"),也可以解决这个问题
@XXX表示:@Component、@Controller、@Service、@Repository
比如Animal接口有两个实现类Dog类和Cat类,这时则需要指定@Qualifier("cat")或者@Qualifier("dog")
@Autowired
@Qualifier("xml中的bean的名称(注意:大小写敏感!!)")
private Cat cat;
// 以下两种写法效果同上
private Cat cat;
@Autowired
@Qualifier("cat")
public void setUserRepository(Cat cat) {
this.cat = cat;
}
// 这种写法常见于SpringMVC
private Cat cat;
@Autowired
public void setUserRepository(@Qualifier("cat") Cat cat) {
this.cat = cat;
}
-----------------------------------------------------------------------------
1、 <context:component-scan>还会自动注册AutowiredAnnotationBeanPostProcessor实例,
该实例可以自动装配具有@Autowired,@Resource和@Inject注解的属性
2、 @Autowired可以修饰类、字段,还可以修饰setter方法,要在xml文件中配置好bean,才能自动装配
@Autowired
private UserService userService;
private Address a1;
@Autowired
public void setA1(Address a1) {
this.a1 = a1;
}
3、 当@Autowired找不到bean时,会抛出异常,中断程序。设置@Autowired(required=false),
会给变量赋一个null值,程序就不会中断了。如果bean存在的话,还是照常实例化bean
4、 默认情况下,当IOC容器里存在多个类型兼容的Bean时(即多态),通过类型的自动装配(@Autowired)将无法工作,
此时可以在@Qualifier注解里提供Bean的名称,@Qualifier("xml中bean的名称(注意:大小写敏感!!)")。Spring允许对方法的参数标注@Qualifier以
指定注入的Bean的名称。
或者,给@XXX注解添加 (value="指定bean名称"),然后添加@Qualifier("同一个bean名称"),也可以解决这个问题
@XXX表示:@Component、@Controller、@Service、@Repository
比如Animal接口有两个实现类Dog类和Cat类,这时则需要指定@Qualifier("cat")或者@Qualifier("dog")
@Autowired
@Qualifier("xml中的bean的名称(注意:大小写敏感!!)")
private Cat cat;
// 以下两种写法效果同上
private Cat cat;
@Autowired
@Qualifier("cat")
public void setUserRepository(Cat cat) {
this.cat = cat;
}
// 这种写法常见于SpringMVC
private Cat cat;
@Autowired
public void setUserRepository(@Qualifier("cat") Cat cat) {
this.cat = cat;
}
-----------------------------------------------------------------------------