Spring @Transactional annotation not working with auto wiring?

My application uses Spring auto wiring to configure beans. I just tried adding @Transactional and the expected proxies do not seem to be called. I want the PersonalController to call UpdatePublicMapService with UpdatePublicMapService wrapped by a transaction proxy.

I see that PersonalController is being created twice. The first time it receives a proxy server, but the second time it receives an unprofiled target. What am I doing wrong?

Many thanks for your help.

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

  ... <tx:annotation-driven transaction-manager="txManager"/> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> ... 

ApplicationContext-security.xml

  ... <context:component-scan base-package="com.th"/> <context:component-scan base-package="org.springframework.security.core.userdetails"/> ... 

Personalcontroller

 @Controller @RequestMapping("/personal") public class PersonalController { @Autowired public void setUpdatePublicMapService(UpdatePublicMapService updatePublicMapService) { this.updatePublicMapService = updatePublicMapService; } } 

UpdatePublicMapService

 @Service @Transactional public class UpdatePublicMapService { ... } 

Magazine fragment

 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' 
+6
java spring
source share
3 answers

I did it. Spring downloads two application contexts and a boot method in which two downloadable UpdatePublicMapServices are loaded.

ContextLoaderListener loads the root context of the application. In my case, he discovered and downloaded UpdatePublicMapService using a transaction wrapper.

DispatcherServlet then loads and reads <name>-servlet.xml . In my case, it contained <context:component-scan base-package="com.th"/> , which checked and downloaded UpdatePublicMapService again and again, but without a transaction shell.

The fix was to crop the component scan configuration in order to hit only what I wanted to load into the servlet, and not in the context of the root application.

+11
source share

I had a similar problem, but a different solution. My code used BeanFactoryHelper.getBean (...). If you use this class, you need to call the use () before and release () methods after.

+1
source share

Define an interface for UpdatePublicMapService and use this interface under the @Autowired annotation in your controller. Leave the @Transactionnal annotation in the implementation of the UpdatePublicMapService class, and Spring should do just fine with your automatically made transactional object.

+1
source share

All Articles