Spring in Action(第三章 最小化 Spring XML配置)学习笔记

1.减少XML的配置数量
a.Spring提供了几种技巧,可以帮助我们减少XML的配置数量
b.自动装配
有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean
的依赖关系
c.自动检测
比自动装配更进一步,让Spring能够识别哪些类需要被配置成Spring Bean,从而减少对<bean>元素的
使用

2.4种类型的自动装配
a.byName
b.byType
c.constructor
d.autodetect 首先尝试使用constructor进行装配,失败后再尝试auto detect进行装配。

3.使用注解装配
a.使用@Autowired不仅可以注解setter方法,也可以标注需要自动装配bean的引用的任意方法,甚至可以
标注构造器。
b.另外,我们可以使用@Autowired注解直接标注属性,并删除setter方法,它并不受限于private关键字。
c.@Autowired的限制:应用中必须只能有一个Bean适合装配到@Autowired注解所标注的属性或参数中
d.可选自动装配,属性不一定非要装配,null值也是可以接受的,可通过设置@Autowired的required属性
为false来配置自动装配是可选的。如:
@Autowired(required=false)
private Instrument instrument;
e.限定歧义性的依赖,为帮助@Autowired鉴别出哪一个bean才是我们想要的,我们可以配合Spring的
@Qualifier注解。
@Autowired
@Qualifier(“guitar”)
private Instrument instrument;
上述代码表示,@Qualifier注解将尝试注入ID为guitar的Bean。
除了上述方式外,还可以在xml中声明:
<bean class =“com.springinaction.springidol.Guitar”>
     <qualifier value=“stringed”/>
</bean>
上述限制了吉他(guitar)Bean是一个弦乐器,除了上述方式外,还可以使用@Qualifier注解标注Guitar类:
@qualilfier("stringed")
public class Guitar implements Instrument{
}

4.借助@Inject实现基于标准的自动装配。

5.自动检测Bean
即使<context:annotation-config>有助于完全消除Spring配置里的<property>和<constructor-arg>元素,
我们仍需要使用<bean>元素显式定义Bean。<context-conponent-scan>除了能完成<context:annotation
-config>一样的工作,还允许Spring自动检测Bean和定义Bean,这意味着不实用<bean>元素,Spring
应用中大多数Bean都能够实现定义和装配。为配置Spring自动检测,需要使用<context-conponent-scan>
来代替<context:annotation-config>元素。<context-conponent-scan>元素会扫描指定的包及其所有子包,
并查找出能够自动注册为Spring Bean的类,base-pacage属性标志了<context-conponent-scan>元素所
扫描的包。

//@Autowired注解存在两种会阻碍我们工作的情景,具体来讲就是应用中必须只能有一个Bean适合装配到
@Autowired所标注的属性或参数中,如果没有匹配的Bean或多个匹配的Bean,@Autowired会遇到一些
麻烦,但上述两种场景都有对应的解决方案。

//对于不存在的bean,null也可以接受,在这种场景下可以通过设置@Autowired的required属性为false来
配置自动装配是可选的,如@Autowired(required=false) private Instrument instrument;这是找不到匹配的
类型为Instrument的Bean就不会发生NoSuchBeanDefinationException的错误,而会将其属性设置为null。

//当多个bean都实现了某个接口时,装配时可能有多个bean可供选择,这时是没法选出哪个bean是合适的,
可以使用Qualifier来规避这种冲突;
@Autowired
@Qualifier(“guitar”)
private Instrument instrument;

<bean class = “com.springinaction.springidol.Guitar”>
     <qualifier value = “stringed” />
</bean>


5.为自动检测标注bean


<context:component-scan>元素除了完成与<context:annotation-config>一样的工作,还Bean和定义Bean,
这意味着不使用bean元素,Spring应用中的大多数(或者所有)Bean都能实现定义和装配。为配置Spring自动
检测,需要使用<context:component-scan>元素代替<context:annotation-config>元素。

<context:component-scan>元素会扫描指定的包及其所有的子包,并查找出所有能够自动注册为Spring Bean
的类,base-package属性标识了<context:component-scan>元素所扫描的包。
那么<context:component-scan>查找使用构造型(stereotype)注解所标注的类,这些标注如下:
@Conponent通用的构造型注解,标识该类为Spring组件,标注任意自定义注解
@Controller标识该类定义为Spring MVC controller
@Respository 标识将该类定义为数据仓库
@Service 标识将定义为服务
@Conponent
public class Guitar implements Instrument{
     public void play(){
          System.out.println(“hello world”);
     }
}
Bean的id默认为guitar
现在我们来标注Instrumentlist类:
@Component(“eddie”)
public class Instrumentalist implements Performer{
     // ….
}
这种方式与上述方式不同,该Bean的id不会像上一个例子中那样默认设置为类的名称”instrumentalist”,而是
显式地命名为eddie。

6.过滤组件扫描
a.定义一个配置类
@Configuration
public class SpringIdolConfig{
     // Bean declaration methods go here
}
//该标识告诉Spring:这个类包含一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值