我的应用程序使用
Spring自动布线来配置bean.我刚刚尝试添加@Transactional,似乎没有调用预期的代理.我希望PersonalController使用事务代理包装的UpdatePublicMapService调用UpdatePublicMapService.
我看到的是PersonalController被实例化两次.它第一次获得代理但第二次获得未代理的目标.我究竟做错了什么?
非常感谢您的帮助.
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 { ... }
记录片段
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,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,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,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,881 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [createTrailJunction] with attribute [PROPAGATION_required,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,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,883 DEBUG [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] - Adding transactional method [deleteReplacedPublicTrailSegments] with attribute [PROPAGATION_required,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,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,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,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,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,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,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,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,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,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被加载.
ContextLoaderListener加载根应用程序上下文.在我的例子中,它发现并使用事务包装器加载了UpdatePublicMapService.
然后DispatcherServlet加载并读取< name> -servlet.xml.就我而言,它曾经包含< context:component-scan base-package =“com.th”/>它再次扫描并加载了UpdatePublicMapService – 但是没有事务包装器.