Spring使⽤注解的⽅式配置bean的属性-bean之间的引⽤关系 前边我们讲过了使⽤注解的⽅式来为类创建⼀个bean的实例,使其被SpringIOC容器管理。即先使⽤注解标注在类上,然后使⽤
<context:component-san>标签指定Spring扫描的包及其⼦包的类。下边我们来讲⼀讲如何使⽤注解的⽅式来为bean的属性赋值,即如何使⽤注解的⽅式指定bean之间的关联关系。
<context:component-scan>这个配置在IOC配置⽂件中的标签,除了可以指定要扫描的组件之外呢,它还有⼀个很重要的功能,就是会⾃动注册⼀个AutowiredAnnotationBeanPostPorcessor后置处理器的实例,这个后置处理器可以⾃动的装配具有
@Autowired/@Resource/@Inject的属性----即将存在于IOC容器中的bean的实例于相同属性类型的变量装配起来,即划等号。
在这三种注解中,@Autowired注解是最常见的注解。其实他们三个注解的功能都是⼀样的,我们常⽤@Autowired,所以我们着重来讲⼀讲它。
1. 功能
@Autowired的功能是:可以⾃动装配具有兼容类型的单个bean的属性。即被@Autowired注解标注的属性,Spring会⾃动的从当前IOC 容器中寻匹配的属性类型,然后将其赋值给这个属性。
2. 使⽤范围
@Autowired注解可以写在属性上、构造⽅法上、⼀切具有参数的⽅法上(如setter⽅法)。
3. 特性
默认情况下,所有被@Autowired注解标注的属性,都必须在IOC容器中可以到对应的属性类型的bean,否则会报异常,因为⼀旦
@Autowired注解添加到属性上,当IOC容器初始化时,Spring的⾃动匹配机制就会触发,不到就会包notfoundbean异常。如果我们不希望某个属性不被设置也不会出异常,可以在这个属性的@Autowired注解中添加属性required="false"。
④ 冲突
当IOC容器中存在多个与被@Autowired注解的属性(接⼝)的类型相同的bean(接⼝的实现类),那么Spring会去默认的⾮限定类名去匹配属性(这个⾮限定类名可以使⽤value属性设定),如果不存在这个⾸字母⼩写的⾮限定类名,也可以在set⽅法中的形参前加上
@Qualify(beanName)来指定这个形参中属性对应的bean的名称、
⑤ 作⽤于数组、集合、Map
当@Autowired注解定义在数组类型的属性上时,Spring会将所有和数组类型匹配的bean都装配到这个数组中
spring ioc注解当@Autowired注解定义在集合类型的属性上时,Spring会检查集合的类型,然后将IOC中所有满⾜这个类型bean都装配到这个集合中
当@Autowired注解定义在Map类型的属性上时,Spring会检查Map的值的类型,然后将所有满⾜条件的bean以beanName-bean的形式放到这个Map属性中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论