spring的事务管理配置如下:
.....
<!-- 事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service,*Manager</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>
......
程序在启动的时候,报错:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'transactionManager': Bean with name 'transactionManager' has been
injected into other beans [transactionInterceptor] in its raw version as part of a circular reference, but has eventually been wrapped (for example as part of auto-
proxy creation). This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using
'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
出现了循环依赖的错误,终于发现是
<property name="beanNames">
<value>*Service,*Manager</value>
</property>
里面的问题,transactionManager后边也是Manager。这样会把transactionInterceptor注入到transactionManager中,故将bean id="transactionManager"改成其他的名字不用Manager结尾,或者将*Manager改成其他的就不会出现这个错误了。
如果要改bean transactionManager 的名字,记得将transactionInterceptor中<property name="transactionManager" ref="transactionManager"/>
的ref="transactionManager"也改成对应的名字。
网上还发现了一种解决方法,发现也可行,不求甚解,先记下:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
lazy-init="true" >
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
将bean id="transactionManager"延迟加载。
分享到:
相关推荐
Spring源码最难问题:当Spring AOP遇上循环依赖 Spring源码中最难的问题之一是循环依赖问题,当Spring AOP遇上循环依赖时,该如何解决? Spring通过三级缓存机制解决循环依赖的问题。 在Spring中,bean的实例化...
在Spring框架中,循环依赖(Circular Dependency)是指两个或多个bean之间形成了一种相互引用的关系,使得它们在初始化过程中无法独立完成实例化。在上述案例中,`AuthorService`依赖于`BookService`,而`...
Spring循环依赖debug源码图
Spring的循环依赖处理机制是其依赖注入的核心功能之一,它使得开发者能够编写松耦合的代码,而无需过多关注依赖关系可能导致的问题。然而,了解其限制并合理设计bean之间的依赖关系,是避免潜在问题的关键。在编程时...
但如果开发者明确指定允许循环依赖,Spring会在每次请求prototype Bean时进行实例化和依赖注入,这可能导致每次请求都会创建一个新的Bean实例,从而避免了循环引用的问题。 总结来说,Spring通过“三级缓存”和“半...
了解并熟练掌握以上策略,可以帮助我们更有效地应对Spring中的动态代理导致的循环依赖问题。 为了更好地理解并实践这些解决方案,你可以参考提供的压缩包文件`demo-spring`中的示例代码,通过实际操作来加深印象。...
Spring循环依赖.vsdx
Spring5.0源码深度解析之SpringBean循环依赖问题解决方案 Spring5.0源码深度解析之SpringBean循环依赖问题解决方案是指在Spring框架中如何解决Bean的循环依赖问题。在Spring框架中,Bean的循环依赖指的是两个或多个...
SpringBean 循环依赖问题与解决方案 SpringBean 循环依赖问题是指在 Spring 框架中,多个 Bean 之间存在相互依赖关系,导致 Bean 创建失败或无法正确注入的问题。这种问题常见于大型项目中,特别是在复杂的业务系统...
Spring框架提供了一种全面的方式来解决各种各样的问题,从依赖注入到事务管理,再到Web应用开发。 - **快速入门**:Spring框架为开发者提供了快速入门指南,帮助新手快速上手。通过简单的示例,开发者可以快速理解...
spring bean循环依赖时序图详细的描述了spring的循环依赖关系,帮我们快速了解spring是如何优雅的进行处理的
Spring 框架中循环依赖是一个常见的问题,它指的是两个或多个 Bean 之间存在的相互依赖关系,例如 A 依赖 B,B 依赖 A,这种情况下,Spring 需要解决这个循环依赖关系,以便正确地实例化和初始化 Bean。 在 Spring ...
Spring循环依赖的解决办法 Spring框架中,循环依赖是指两个或多个Bean相互引用,形成一个环。这篇文章主要介绍了Spring循环依赖的解决办法。在Spring中,循环依赖可以分为两种场景:构造器的循环依赖和属性的循环...
《Spring 框架详解——基于“spring-framework-reference”参考文档》 在Java开发领域,Spring框架无疑是最具影响力和广泛使用的轻量级框架之一。它以其强大的功能、灵活的设计和丰富的生态系统,成为了企业级应用...
学习 "spring-boot-reference-zh",将有助于深入理解 Spring Boot 的工作原理,提升开发效率,同时避免常见问题。通过这份文档,你可以了解每个功能的详细配置、使用方法以及最佳实践,从而更好地利用 Spring Boot ...
根据提供的文件信息,这份文档是一份英文版的Spring Boot参考指南,标题为"spring-boot-reference.pdf",描述提到该文档对于学习Spring Boot及搭建微服务框架具有重要帮助,标签为"spring-boot"。文件内容涉及Spring...
整体上,Spring Boot Reference Guide对Spring Boot的各个方面提供了深入的指导,包括但不限于Spring Boot的安装和配置、构建系统、代码结构、自动配置、Spring Beans管理、依赖注入和应用的运行。对于初学者来说,...