问题描述
我的应用程序使用Spring自动布线来配置bean。我刚刚尝试添加@Transactional,似乎没有调用预期的代理。我希望PersonalController使用事务代理包装的UpdatePublicMapService调用UpdatePublicMapService。
My application uses Spring auto-wiring to configure the beans. I have just tried adding @Transactional and the expected proxies do not seem to be called. I want the PersonalController to call UpdatePublicMapService with the UpdatePublicMapService wrapped by the transaction proxy.
我看到PersonalController被实例化两次。它第一次获得代理但第二次获得未代理的目标。我做错了什么?
What I see is that the PersonalController is instantiated twice. The first time it gets the proxy but the second time it gets the un-proxied target. What am I doing wrong?
非常感谢您的帮助。
web.xml
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml, /WEB-INF/applicationContext-security.xml</param-value>
</context-param>
...
applicationContext.xml
applicationContext.xml
...
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
...
applicationContext-security.xml
applicationContext-security.xml
...
<context:component-scan base-package="com.th"/>
<context:component-scan base-package="org.springframework.security.core.userdetails"/>
...
PersonalController
PersonalController
@Controller
@RequestMapping("/personal")
public class PersonalController {
@Autowired
public void setUpdatePublicMapService(UpdatePublicMapService updatePublicMapService) {
this.updatePublicMapService = updatePublicMapService;
}
}
UpdatePublicMapService
UpdatePublicMapService
@Service
@Transactional
public class UpdatePublicMapService {
...
}
日志片段
13:14:40,268 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean 'personalController'
13:14:40,268 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'personalController'
...
13:14:40,293 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.rest.personal.trailsegment.PersonalController]: AutowiredMethodElement for public void com.th.rest.personal.trailsegment.PersonalController.setUpdatePublicMapService(com.th.service.UpdatePublicMapService)
13:14:40,325 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'personalController': AutowiredMethodElement for public void com.th.rest.personal.trailsegment.PersonalController.setUpdatePublicMapService(com.th.service.UpdatePublicMapService)
13:14:40,326 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean 'updatePublicMapService'
13:14:40,326 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'updatePublicMapService'
13:14:40,380 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalRouteDataGateway(com.th.data.personal.PersonalRouteDataGateway)
...
13:14:40,420 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'publicTrailJunctionDataGatewayImpl'
13:14:40,420 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
13:14:40,430 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [updateToPublicMap] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,459 DEBUG [org.springframework.aop.framework.autoproxy.InfrastructureAdvisorAutoProxyCreator] - Creating implicit proxy for bean 'updatePublicMapService' with 0 common interceptors and 1 specific interceptors
13:14:40,500 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Creating CGLIB2 proxy: target source is SingletonTargetSource for target object [com.th.service.UpdatePublicMapService@6abe6abe]
13:14:40,849 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0'
13:14:40,877 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.updateToPublicMap(long)
13:14:40,878 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: java.util.Map com.th.service.UpdatePublicMapService.copySegments(com.th.data.personal.PersonalRoute,java.util.Map)
13:14:40,878 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: java.util.Map com.th.service.UpdatePublicMapService.makePrivateTrailsPublic(com.th.data.personal.PersonalRoute)
13:14:40,878 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [copyTrailJunctions] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,879 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.copyTrailJunctions(com.th.data.personal.PersonalRoute)
13:14:40,880 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [junctionHasSegmentToUpdatePublicMap] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,880 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public boolean com.th.service.UpdatePublicMapService.junctionHasSegmentToUpdatePublicMap(com.th.data.personal.PersonalTrailJunction,java.util.List)
13:14:40,881 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [linkPersonalTrailSegmentsAndJunctions] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,881 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.linkPersonalTrailSegmentsAndJunctions(com.th.data.personal.PersonalRoute,java.util.Map)
13:14:40,881 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [createTrailJunction] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,882 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public com.th.service.SplitResult com.th.service.UpdatePublicMapService.createTrailJunction(java.lang.String,long)
13:14:40,882 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [copyPersonalPublicTrailSegments] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,882 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.copyPersonalPublicTrailSegments(java.util.Collection,java.util.List)
13:14:40,883 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [deleteReplacedPublicTrailSegments] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,883 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.deleteReplacedPublicTrailSegments(java.util.Collection)
13:14:40,883 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPersonalRouteDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,885 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPersonalRouteDataGateway(com.th.data.personal.PersonalRouteDataGateway)
13:14:40,886 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPersonalTrailSegmentDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,886 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPersonalTrailSegmentDataGateway(com.th.data.personal.PersonalTrailSegmentDataGateway)
13:14:40,887 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPersonalTrailDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,887 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPersonalTrailDataGateway(com.th.data.personal.PersonalTrailDataGateway)
13:14:40,888 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPersonalTrailJunctionDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,888 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPersonalTrailJunctionDataGateway(com.th.data.personal.PersonalTrailJunctionDataGateway)
13:14:40,889 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPublicTrailDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,889 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPublicTrailDataGateway(com.th.data.pub.PublicTrailDataGateway)
13:14:40,890 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPublicTrailSegmentDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,890 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPublicTrailSegmentDataGateway(com.th.data.pub.PublicTrailSegmentDataGateway)
13:14:40,891 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPersonalPublicTrailSegmentDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,891 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPersonalPublicTrailSegmentDataGateway(com.th.data.personal.PersonalPublicTrailSegmentDataGateway)
13:14:40,891 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [setPublicTrailJunctionDataGateway] with attribute [PROPAGATION_REQUIRED,ISOLATION_DEFAULT]
13:14:40,892 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public void com.th.service.UpdatePublicMapService.setPublicTrailJunctionDataGateway(com.th.data.pub.PublicTrailJunctionDataGateway)
13:14:40,892 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
13:14:40,892 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Found 'equals' method: public boolean java.lang.Object.equals(java.lang.Object)
13:14:40,892 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Found finalize() method - using NO_OVERRIDE
13:14:40,892 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Found 'hashCode' method: public native int java.lang.Object.hashCode()
13:14:40,893 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Unable to apply any optimisations to advised method: public java.lang.String java.lang.Object.toString()
13:14:40,893 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isFrozen()
13:14:40,893 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isProxyTargetClass()
13:14:40,893 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract java.lang.Class[] org.springframework.aop.framework.Advised.getProxiedInterfaces()
13:14:40,893 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isInterfaceProxied(java.lang.Class)
13:14:40,894 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setTargetSource(org.springframework.aop.TargetSource)
13:14:40,894 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract org.springframework.aop.TargetSource org.springframework.aop.framework.Advised.getTargetSource()
13:14:40,895 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setExposeProxy(boolean)
13:14:40,895 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isExposeProxy()
13:14:40,896 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setPreFiltered(boolean)
13:14:40,896 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isPreFiltered()
13:14:40,896 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract org.springframework.aop.Advisor[] org.springframework.aop.framework.Advised.getAdvisors()
13:14:40,897 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvisor(org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
13:14:40,897 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvisor(int,org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
13:14:40,897 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.removeAdvisor(org.springframework.aop.Advisor)
13:14:40,898 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.removeAdvisor(int) throws org.springframework.aop.framework.AopConfigException
13:14:40,898 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.springframework.aop.Advisor)
13:14:40,898 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.replaceAdvisor(org.springframework.aop.Advisor,org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
13:14:40,898 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvice(org.aopalliance.aop.Advice) throws org.springframework.aop.framework.AopConfigException
13:14:40,898 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvice(int,org.aopalliance.aop.Advice) throws org.springframework.aop.framework.AopConfigException
13:14:40,900 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.removeAdvice(org.aopalliance.aop.Advice)
13:14:40,904 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.aopalliance.aop.Advice)
13:14:40,904 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract java.lang.String org.springframework.aop.framework.Advised.toProxyConfigString()
13:14:40,907 DEBUG [org.springframework.aop.framework.Cglib2AopProxy] - Method is declared on Advised interface: public abstract java.lang.Class org.springframework.aop.TargetClassAware.getTargetClass()
13:14:44,767 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'updatePublicMapService'
13:14:44,768 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'personalController' to bean named 'updatePublicMapService'
...
13:15:50,637 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'personalController': AutowiredMethodElement for public void com.th.rest.personal.trailsegment.PersonalController.setUpdatePublicMapService(com.th.service.UpdatePublicMapService)
13:15:50,638 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean 'updatePublicMapService'
13:15:50,638 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'updatePublicMapService'
13:15:50,646 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalRouteDataGateway(com.th.data.personal.PersonalRouteDataGateway)
13:15:50,646 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalTrailSegmentDataGateway(com.th.data.personal.PersonalTrailSegmentDataGateway)
13:15:50,646 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalTrailDataGateway(com.th.data.personal.PersonalTrailDataGateway)
13:15:50,646 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalTrailJunctionDataGateway(com.th.data.personal.PersonalTrailJunctionDataGateway)
13:15:50,647 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPublicTrailDataGateway(com.th.data.pub.PublicTrailDataGateway)
13:15:50,647 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPublicTrailSegmentDataGateway(com.th.data.pub.PublicTrailSegmentDataGateway)
13:15:50,647 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalPublicTrailSegmentDataGateway(com.th.data.personal.PersonalPublicTrailSegmentDataGateway)
13:15:50,647 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Found injected element on class [com.th.service.UpdatePublicMapService]: AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPublicTrailJunctionDataGateway(com.th.data.pub.PublicTrailJunctionDataGateway)
13:15:50,648 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Eagerly caching bean 'updatePublicMapService' to allow for resolving potential circular references
13:15:50,648 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalRouteDataGateway(com.th.data.personal.PersonalRouteDataGateway)
13:15:50,649 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'personalRouteDataGatewayImpl'
13:15:50,649 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'personalRouteDataGatewayImpl'
13:15:50,649 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalTrailSegmentDataGateway(com.th.data.personal.PersonalTrailSegmentDataGateway)
13:15:50,650 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'personalTrailSegmentDataGatewayImpl'
13:15:50,650 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'personalTrailSegmentDataGatewayImpl'
13:15:50,650 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalTrailDataGateway(com.th.data.personal.PersonalTrailDataGateway)
13:15:50,651 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'personalTrailDataGatewayImpl'
13:15:50,652 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'personalTrailDataGatewayImpl'
13:15:50,652 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalTrailJunctionDataGateway(com.th.data.personal.PersonalTrailJunctionDataGateway)
13:15:50,652 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'personalTrailJunctionDataGatewayImpl'
13:15:50,653 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'personalTrailJunctionDataGatewayImpl'
13:15:50,653 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPublicTrailDataGateway(com.th.data.pub.PublicTrailDataGateway)
13:15:50,654 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'publicTrailDataGatewayImpl'
13:15:50,654 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'publicTrailDataGatewayImpl'
13:15:50,654 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPublicTrailSegmentDataGateway(com.th.data.pub.PublicTrailSegmentDataGateway)
13:15:50,655 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'publicTrailSegmentDataGatewayImpl'
13:15:50,655 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'publicTrailSegmentDataGatewayImpl'
13:15:50,655 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPersonalPublicTrailSegmentDataGateway(com.th.data.personal.PersonalPublicTrailSegmentDataGateway)
13:15:50,656 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'personalPublicTrailSegmentDataGatewayImpl'
13:15:50,656 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'personalPublicTrailSegmentDataGatewayImpl'
13:15:50,656 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'updatePublicMapService': AutowiredMethodElement for public void com.th.service.UpdatePublicMapService.setPublicTrailJunctionDataGateway(com.th.data.pub.PublicTrailJunctionDataGateway)
13:15:50,657 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean 'publicTrailJunctionDataGatewayImpl'
13:15:50,657 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'publicTrailJunctionDataGatewayImpl'
13:15:50,659 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Eagerly caching bean 'publicTrailJunctionDataGatewayImpl' to allow for resolving potential circular references
13:15:50,659 DEBUG [org.springframework.beans.factory.annotation.InjectionMetadata] - Processing injected method of bean 'publicTrailJunctionDataGatewayImpl': AutowiredMethodElement for public void com.th.data.pub.impl.PublicTrailJunctionDataGatewayImpl.setDataSource(javax.sql.DataSource)
13:15:50,660 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'dataSource'
13:15:50,660 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'publicTrailJunctionDataGatewayImpl' to bean named 'dataSource'
13:15:50,661 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'publicTrailJunctionDataGatewayImpl'
13:15:50,661 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'updatePublicMapService' to bean named 'publicTrailJunctionDataGatewayImpl'
13:15:50,661 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'updatePublicMapService'
13:15:50,661 DEBUG [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - Autowiring by type from bean name 'personalController' to bean named 'updatePublicMapService'
推荐答案
我工作过出。 Spring加载了两个应用程序上下文,它加载的方式导致两个UpdatePublicMapServices被加载。
I worked it out. Spring loads two application contexts and the way it loaded resulted in two UpdatePublicMapServices being loaded.
ContextLoaderListener加载根应用程序上下文。在我的例子中,它发现并使用事务包装器加载了UpdatePublicMapService。
The ContextLoaderListener loads a root application context. In my case, it found and loaded the UpdatePublicMapService with the transaction wrapper.
然后DispatcherServlet加载并读取< name> -servlet.xml
。就我而言,它曾经包含< context:component-scan base-package =com.th/>
,它再次扫描并加载了UpdatePublicMapService - 但没有事务包装器。
Then the DispatcherServlet loads and reads <name>-servlet.xml
. In my case, it used to contain <context:component-scan base-package="com.th"/>
which scanned for and loaded UpdatePublicMapService again - but without the transaction wrapper.
解决方法是修改组件扫描配置,以便只查看我想要在servlet中加载的东西而不是根应用程序上下文。
The fix was to trim the component scan configuration to only hit the things I wanted loaded in the servlet and not the root application context.
这篇关于Spring @Transactional注释无法使用自动连线?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!