Spring实战3-最小化Spring XML配置

原创
2015/08/10 21:58
阅读数 142

显式装配

自动装配Bean属性

一共有四种自动装配类型(需要在Bean配置里添加autowire属性来指定用哪种类型)

  • byName-把与Bean的属性具有相同名字或ID的其他Bean自动装配到Bean的对应属性中。如果没有跟属性的名字相匹配的Bean,则该属性不进行装配。--实际上对比的是Bean ID。

  • byType-把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性。如果没有跟属性的类型相匹配的Bean,则该属性不被装配。局限性如果Spring找到多个Bean,它们的类型都与需要自动装配的属性的类型相匹配,这个时候SPring不会猜测哪一个更适合,而是抛出异常。不过提供了如下参数来指定用哪个Bean来注入。<bean>元素的primary属性。如果该值为true,那么该Bean将比其他候选Bean优先被选择。默认都是true。如果希望排除某些Bean作为候选者,那么可以设置它们的autowire-candidate属性为false.则它们都会被忽略作为候选Bean.

  • constructor-把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。

  • autodetect-首先尝试使用constructor进行自动装配,如果失败,则再尝试使用byType进行自动装配。

使用注解装配

2.5引入注解装配,与在XML中使用autowire属性自动装配无太大差别。默认禁用注解装配。若需使用,则需要在spring中启用它。<context:annotation-config/>.spring支持如下几种用于自动装配的注解

  1. Spring自带的@Autowired注解

  2. JSR-330的@Inject注解

  3. JSR-250的@Resource注解

1:使用@Autowired注解:可以标注于setter方法,标注于需要自动装配Bean引用的任意方法;甚至可以标注构造器;还可以直接标注属性,并删除setter方法,甚至都不会受限于private关键字。

有两种局限:没有匹配的Bean,或者存在多个匹配的Bean.

a)可选的自动装配。 默认情况下,@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。如果没有Bean可以装配到@Autowired锁标注的属性或参数中,自动装配就会失败。属性亦可设置成null,通过设置该注解的required属性为false来配置自动装配是可选的。

b)限定歧义性的依赖:当有多个Bean都完全满足装配条件,并且都可以被装配到属性或参数中的情况时,为了帮助@Autowired鉴别出哪一个Bean才是所需要的,可以使用限定器注解@Qualifier。我们亦可以自定义限定器(Qualifier)


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
6 收藏
0
分享
返回顶部
顶部