修理俺的系统架构(二)

现在说说俺的架构修理过程:

用过spring的同学们,如果项目不是太小的话,spring的配置文件上到千行那是很轻松的事了,即使你byName了或者byType了,在spring2.0之前,其实这也是一件很无奈的事情,说到这里,也许有的同学已经明白是怎么回事了,ok,让我们简化配置文件吧!这里,偶使用前后对比的方式来展示简化的配置:

(1)首先简化一下事务的配置
     配置前:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory"/>
		</property>
	</bean>
	
	<bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
        	<property name="transactionManager">
        		<ref bean="transactionManager"/>
        	</property> 
        	<property name="transactionAttributes"> 
            		<props> 
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>	
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
            		</props> 
        	</property> 
    	</bean>


配置后:
	<aop:config>
		<aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvice"/>
	</aop:config>
	<tx:advice id="txAdvice" transaction-manager="myTxManager">
		<tx:attributes>
			<tx:method name="save*"/>
			<tx:method name="update*"/>
			<tx:method name="delete*"/>
			<tx:method name="find*" read-only="true"/>
		</tx:attributes>
	</tx:advice>
 <bean id="myTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>


事实上,如果在定义txManager时采用如下名字定义:
<bean id="[b]transactionManager[/b]" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>

则在txAdvice定义的时候,无需特别的指定transaction-manager,因为Spring默认会去查找这个名字定义的bean,具体请参见Spring源码。

如果单从配置的文字数来看的话,没有少多少,但是偶感觉至少清爽了不少,而且最重要的是此配置实际是将事务配置做为一个普通的aop来配置,也就是说,上面的aop:config并不只是服务于事务aop配置,而是对所有的aop都有效,后面会给出aop配置的log。

你可能感兴趣的:(spring,AOP,bean)