autowire="byName"会自动根据你的属性的名字帮你注入你要的bean,要不就要手动写明。
?autowire同注入相关还是同事务管理相关?
代理匹配的名字有*Manager,就是想匹配所有的ManagerObject。但是好像没有注意到,这样配置会把transactionManager也匹配上,然后定义的是find以外的方法都是要事务的。也就说transactionManager执行getTransaction的时候还会要事务,然后就是死循环,造成溢出。。
我解决的办法就是transactionManager改称transactionManagerHibernate。这么做的时候一定要注意名字的问题。别一不小心,把一个不相关的东东给弄进来的。。。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="contact.SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="/contact/contact-hibernate.cfg.xml" />
</bean>
<!-- bussiness bean setting -->
<bean id="contact.CatalogDao" class="wegov.contact.persistent.CatalogDAO">
<constructor-arg><ref bean="contact.SessionFactory"/></constructor-arg>
</bean>
<bean id="contact.ItemDao" class="wegov.contact.persistent.ItemDAO">
<constructor-arg><ref bean="contact.SessionFactory"/></constructor-arg>
</bean>
<bean id="contact.RelationDao" class="wegov.contact.persistent.RelationDAO">
<constructor-arg><ref bean="contact.SessionFactory"/></constructor-arg>
</bean>
<bean id="platform.ResAccessHelper" class="wegov.platform.ResAccessHelper">
<constructor-arg index="0"><ref bean="contact.SessionFactory"/></constructor-arg>
<constructor-arg index="1"><value>wegov.contact.common.ContactRightInfo</value></constructor-arg>
</bean>
<bean autowire="byName" id="contact.CatalogHelper" class="wegov.contact.service.CatalogHelper">
<property name="_dao" ref="contact.CatalogDao"/>
<property name="_itemHelper" ref="contact.ContactItemHelper"/>
<property name="_relationHelper" ref="contact.ContactRelationHelper"/>
<property name="_resRightHelper" ref="platform.ResAccessHelper"/>
</bean>
<bean autowire="byName" id="contact.ContactItemHelper" class="wegov.contact.service.ContactItemHelper">
<property name="_dao" ref="contact.ItemDao"/>
<property name="_catalogHelper" ref="contact.CatalogHelper"/>
<property name="_relationHelper" ref="contact.ContactRelationHelper"/>
<property name="_resRightHelper" ref="platform.ResAccessHelper"/>
</bean>
<bean autowire="byName" id="contact.ContactRelationHelper" class="wegov.contact.service.ContactRelationHelper">
<property name="_relationDao" ref="contact.RelationDao"/>
</bean>
<!-- Transaction Setting -->
<!-- using JtaTransactionManager for deploy running -->
<!--
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
-->
<!-- using HibernateTransactionManager for local test -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="contact.SessionFactory" />
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="get*,have*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Helper</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- add new Interceptor -->
</list>
</property>
</bean>
这个bean不知道起什么作用?
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor" />
</bean>
</beans>