通过注解配置Bean(2)

问:怎么用注解来配置bean与bean之间的引用关系?

【组件装配】

1.<context:component-scan> 元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@autowired和@Resource、@Inject注解的属性。

 

【使用@Autowired自动装配Bean】

@Autowired注解自动装配具有兼容类型的单个Bean属性

--构造器,普通字段(及时是非public),一切具有参数的方法都可以应用 @Autowired注解

 

--默认情况下,所有使用@Autowired注解的属性都需要被设置。当Spring找不到匹配的Bean装配属性时,会抛出异常若某一属性允许不被设置,可以设置@Autowired注解的required属性为false

/spring-1/src/com/hk/beans/annotation/repository/UserRespositoryImpl.java:

 1 @Repository("userRepository")
 2 public class UserRespositoryImpl implements UserRespository {
 3     @Autowired
 4     private TestObject testObject;
 5     
 6     @Override
 7     public void save() {
 8         System.out.println("'UserRepository Save...");
 9         System.out.println(testObject);
10     }
11 }

/spring-1/src/com/hk/beans/annotation/TestObject.java:

1 package com.hk.beans.annotation;
2 
3 import org.springframework.stereotype.Component;
4 
5 public class TestObject {
6     
7 }

运行结果:

报错:No qualifying bean found for dependency [com.hk.beans.annotation.TestObject]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

然后,可以设置@Autowired注解的required属性为false,如下:

运行结果:

 

--默认情况下,当IOC容器里存在多个类型兼容的Bean时,通过类型的自动装配将无法工作。此时可以在@Qualifier注解里提供Bean的名称。Spring允许对方法的入参标注@Qualifier已指定的注入Bean的名称。

 

--@Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的Bean进行自动装配。

 

--@Autowired注解也可以应用在集合属性上,此时Spring读取该集合的类型信息,然后自动装配所有与之兼容的Bean。

 

--@Autowired注解用在java.util.Map上时,若该Map的键值为String,那么Spring将自动装配与之Map值类型兼容的Bean,此时Bean的名称作为键值

 

【使用@Resource和@Inject自动装配Bean】

1.Spring还支持@Resource和@Inject注解,这两个注解和@Autowired注解的功能类似。

2.@Resource注解要求提供一个Bean名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为Bean的名称

3.@Inject和@Autowired注解一样也是按类型匹配注入的Bean,但没有required属性。

4.建议使用@Autowired注解

posted @ 2018-09-15 16:58  猩生柯北  阅读(134)  评论(0编辑  收藏  举报