使用Spring AOP代理方式实现声明式事务的原理
悬赏分:10 | 提问时间:2009-7-3 17:35 | 提问者:windto7sea
<bean id=”myTransactionManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory”>
<ref local=”gwssiSessionFactory”/>
</property>
</bean>
<bean id=”transactionProxyFactoryBean” abstract=”true” lazy-init=”true” class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”>
<property name=”transactionManager”>
<ref bean=”myTransactionManager”/>
</property>
<property name=”transactionAttributes”>
<props>
<prop key=”*”>PROPAGATION_REQUIRED</prop>
<!–<prop key=”get*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”set*”>PROPAGATION_REQUIRED,readOnly</prop>–>
</props>
</property>
</bean>
这段代码倒是看得眼睛都腻了 可是到底原理是什么? 配置这么多东西 是如何触发的呢? 请高手赐教啊……..
推荐答案
首先将sessionFactory注入到HibernateTransactionManager中,再将HibernateTransactionManager对象注入到TransactionProxyFactoryBean对象中~应该还有一段对sessionFactory的定义
AOP就是面向代理的模式,本来一个应用程序要对某个对象进行操作的,但是这个对象中包含了很多与他本身不相关的业务逻辑,不如日志、锁等等。所以就要想办法把这些无关的东西全部抽离出来。被抽离过的对象就是被代理对象。
此时应用程序再调用的时候,会去调用代理对象,这个对象中包含了对被代理对象的调用以及被抽离出来的无关的业务逻辑方法。被代理对象则是纯粹的业务逻辑。
至于触发的话因为在容器起来的时候,比如tomcat或者jboss,会定义到指定的xml文件然后这些谁注入到谁的东西会被自动识别的。
回答时间:2009-7-4 15:45