在Spring的applicationContext.xml中配置映射文件的方法:
1。减少配置文件里配置信息的数量
配置applicationContext.xml或者分布在其它的xml文件中的bean时,设置bean与bean之间的相互依赖关系是一件痛苦且容易出错的事。autowire属性的出现减轻了配置文件的容量。
<bean>的autowire属性有6个值。分别为:
a No:即不启用自动装配。Autowire默认的值。
b byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。
c byType:通过属性的类型查找JavaBean依赖的对象并为其注入。
d constructor:通byType一样,也是通过类型查找依赖对象。
e autodetect:在byType和constructor之间自动的选择注入方式。
f default:由上级标签<beans>的default-autowire属性确定。
在<beans default-autowire="byName">可以为本xml文件设置默认的自动装配的类型例如byName,当然在设置具体的<bean id="***" class="***" autowire="byType">时,会自动改变默认的byName为byType。
2。在web.xml中通过配置如下参数
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/*.xml</param-value>
</context-param>
会自动把WEB-INF/classes/sring目录下的所有以.xml结尾的文件加载spring容器进行管理,而不必手动编写每个applicationContex.xml,accessContext.xml等配置文件。
3。利用属性为mappingDirectoryLocation来配置相关的目录位置,从而避免为该目录下的所有文件名进行配置
<property name="mappingDirectoryLocation">
<list>
<value>classpath:/package1/<value>
</list>
</property>
如:
<!-- 设置Hibernate3的SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:com/apache/model</value>
</list>
</property>
</bean>
4。消除ProxyFactoryBean的繁重配置
a.通过继承于parent ProxyFactoryBean
b.使用aop自动代理的方式
在Spring中进行事务的管理均是基于aop的方式,为每个需要事务管理的bean均设定相应的ProxyFactoryBean又是一件非常繁重的工作。使用自动代理可以消除这样的重复的工作。方法如下,声明DefaultAdvisorAutoProxyCreator为所有的advisor作为代理,在context上下文中查找所有的advisor,然后自动代理那些被在pointcut加入了切面的bean。针对事务使用spring中的事务的advisor,TransactionAttributeSourceAdvisor。
该advisor有两种方式进行注入,一种是setter方式,如下:
<!-- 配置自动代理事务 -->
<bean id="transactionAdvisor" class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>
另一种是constructor方式,如下:
<!-- 配置自动代理事务 -->
<bean id="transactionAdvisor" class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<constructor-arg>
<ref bean="transactionInterceptor"/>
</constructor-arg>
</bean>
建议以constructor方式进行注入。