知识大全 Spring Autowire(自动装载)的一次实践
Posted 属性
篇首语:贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring Autowire(自动装载)的一次实践相关的知识,希望对你有一定的参考价值。
Spring Autowire(自动装载)的一次实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
缘起
随着系统中不断的增加需求 功能越来越多了 昨天 看到我项目中的application xml已经超过了 行 还有Acegi和XFire的配置文件 也比较长 所以就想着来分拆和瘦身
基础
如果没有记错的话 Spring是从 起 开始支持自动装载的 这并不是鸡肋功能 在Spring 中得到了进一步的改进 到目前为止 Spring共支持以下五种方式的自动装载
模式 说明 no
不使用自动装配 必须通过ref
元素指定依赖 这是默认设置 由于显式指定协作者可以使配置更灵活 更清晰 因此对于较大的部署配置 推荐采用该设置 而且在某种程度上 它也是系统架构的一种文档形式
根据属性名自动装配 此选项将检查容器并根据名字查找与属性完全一致的bean 并将其与属性自动装配 例如 在bean定义中将autowire设置为by name 而该bean包含master属性(同时提供setMaster( )方法) Spring就会查找名为master
的bean定义 并用它来装配给master属性
如果容器中存在一个与指定属性类型相同的bean 那么将与该属性自动装配 如果存在多个该类型的bean 那么将会抛出异常 并指出不能使用byType方式进行自动装配 若没有找到相匹配的bean 则什么事都不发生 属性也不会被设置 如果你不希望这样 那么可以通过设置dependency check= objects
让Spring抛出异常
与byType的方式类似 不同之处在于它应用于构造器参数 如果在容器中没有找到与构造器参数类型一致的bean 那么将会抛出异常
autodetect通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配 如果发现默认的构造器 那么将使用byType方式
步骤
将application xml分成两个 一个文件里面管理的是系统基本信息的Bean管理 另一个文件是业务信息的Bean管理(当然 如果你觉得还不够的话 可以将其按功能模块进一步拆分)
拆分后当然需要更改web xml中的配置 如下
<context param> <param name>contextConfigLocation</param name> <param value>classpath:applicationContext* xml classpath:xfire servlet xml</param value> </context param>使用byType的方式 对业务信息部分的Bean进行自动装载 因为我Class中的有些属性可能并不与XML配置中的名称一致 所以想使用这样的方式相对简单 不需要去将属性名和XML的Bean ID一一对应 配置如下
<beans default autowire= byType ></beans>来 启动应用 试试看效果吧 正在我庆幸自己不用去比对名称的时候 系统到如下阶段时停住了
|INFO | : : ; | springframework orm hibernate HibernateTransactionManager: springframework orm hibernate HibernateTransactionManager afterPropertiesSet( )|Using DataSource [mons dbcp BasicDataSource@ da eb] of Hibernate SessionFactory for HibernateTransactionManager|此时我等了 分钟 CPU一直被Javaw进程占用 使用率高达 % 目前还不知道为什么会这样 也请各位不吝赐教
既然byType行不通 那就只能byName了 配置如下
<beans default autowire= byName ></beans>然后核对了一遍名称 为了保险 我还是将每个功能都做了一下冒烟测试 幸好不多 只有二十个功能左右 果然有两个 冒烟 的 检查一下 发现是类里面的属性名的大小写不对 改正后 一切OK
成果
项目业务模块部分的Bean配置文件一下从原来的 多行变为 多行 瘦身近 % 系统启动时 缩短了XML校验的时间 虽然时间每次缩小的很短 这对于调试来说 还是很值的 因为项目开发中所有调试的运行会有很多次 总量加起也不是个小数目
以后增加功能模块时 就算是Copy以前的配置来改 也可以少改几个地方
这笔买卖似乎还很值哟 ^ ^
总结
建议不要将所有Bean都设成自动装载 而只用将业务相关的Bean设成自动装载
如果你的项目中名称使用很乱 没有规范 那就不要用byName的自动装载了
cha138/Article/program/Java/ky/201311/28829相关参考
知识大全 Spring Autowire(自动装载)的一次实践[1]
SpringAutowire(自动装载)的一次实践[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 spring用annotation-autowire配置
<?xmlversion=encoding=UTF?> <beansxmlns= xmlns:xsi=instance xmlns:p= xsi:schemaLocati
Spring自动代理机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们一直使用ProxyF
Spring的自动装配 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 采用构造函数注入以及set
Spring自动装配的学习 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在xml配置文件中au
Spring与自动调度任务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近把以前设想做搜索引
spring的aop机制提供两类方式实现类代理一种是单个代理一种是自动代理 单个代理通过ProxyFactoryBean来实现自动代理通过BeanNameAutoProxyCreator或者De
<aop:config> <!<aop:advisorid=userManagerTxad
知识大全 Spring3 Mybatis3 freemarker 自动生成对应表
Spring3Mybatis3freemarker自动生成对应表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
导航对象图从一个已经装载的对象开始通过像aUsergetAddress()getCity()的属性访问器方法访问相关的对象如果Session是打开的当你导航图时Hibernate会自动装载图的节点当对