java

位置:IT落伍者 >> java >> 浏览文章

Spring Autowire(自动装载)的一次实践[1]


发布日期:2018年02月16日
 
Spring Autowire(自动装载)的一次实践[1]

缘起

随着系统中不断的增加需求功能越来越多了昨天看到我项目中的applicationxml已经超过了还有Acegi和XFire的配置文件也比较长所以就想着来分拆和瘦身

基础

如果没有记错的话Spring是从开始支持自动装载的这并不是鸡肋功能在Spring 中得到了进一步的改进到目前为止Spring共支持以下五种方式的自动装载

模式 说明

no 不使用自动装配必须通过ref元素指定依赖这是默认设置由于显式指定协作者可以使配置更灵活更清晰因此对于较大的部署配置推荐采用该设置而且在某种程度上它也是系统架构的一种文档形式

byName 根据属性名自动装配此选项将检查容器并根据名字查找与属性完全一致的bean并将其与属性自动装配例如在bean定义中将autowire设置为by name而该bean包含master属性(同时提供setMaster()方法)Spring就会查找名为master的bean定义并用它来装配给master属性

byType 如果容器中存在一个与指定属性类型相同的bean那么将与该属性自动装配如果存在多个该类型的bean那么将会抛出异常并指出不能使用byType方式进行自动装配若没有找到相匹配的bean则什么事都不发生属性也不会被设置如果你不希望这样那么可以通过设置dependencycheck=objects让Spring抛出异常

constructor 与byType的方式类似不同之处在于它应用于构造器参数如果在容器中没有找到与构造器参数类型一致的bean那么将会抛出异常

autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配如果发现默认的构造器那么将使用byType方式

步骤

将applicationxml分成两个一个文件里面管理的是系统基本信息的Bean管理另一个文件是业务信息的Bean管理(当然如果你觉得还不够的话可以将其按功能模块进一步拆分)

拆分后当然需要更改webxml中的配置如下

<contextparam>

<paramname>contextConfigLocation</paramname>

<paramvalue>classpath:applicationContext*xmlclasspath:xfireservletxml</paramvalue>

</contextparam>

使用byType的方式对业务信息部分的Bean进行自动装载因为我Class中的有些属性可能并不与XML配置中的名称一致所以想使用这样的方式相对简单不需要去将属性名和XML的Bean ID一一对应配置如下

<beans defaultautowire=byType>

</beans>

启动应用试试看效果吧正在我庆幸自己不用去比对名称的时候系统到如下阶段时停住了

[] []

               

上一篇:Spring Autowire(自动装载)的一次实践[2]

下一篇:Spring中事件处理的小技巧[1]