Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring事务-代理混淆_Java_Spring_Transactions - Fatal编程技术网

Java Spring事务-代理混淆

Java Spring事务-代理混淆,java,spring,transactions,Java,Spring,Transactions,AbstractAutoProxyCreator的一个子类试图代理一个bean,但该bean本身已经是使用另一种机制创建的CGLIB代理,如aop:config proxy target class=“true 为了避免这种情况,请确保避免为同一个bean混合不同的方面编织机制(ProxyBeanFactory和aop:config) 在这种情况下,还可以通过通过@Transactional注释编织事务方面 或者,可以从bean中删除自动连接/扫描,并使用setter通过XML注入依赖项 另一种

AbstractAutoProxyCreator
的一个子类试图代理一个bean,但该bean本身已经是使用另一种机制创建的CGLIB代理,如
aop:config proxy target class=“true

为了避免这种情况,请确保避免为同一个bean混合不同的方面编织机制(ProxyBeanFactory和aop:config)

在这种情况下,还可以通过
通过
@Transactional
注释编织事务方面

或者,可以从bean中删除自动连接/扫描,并使用setter通过XML注入依赖项

另一种选择是通过声明
并添加所需的jar,在任何地方使用加载时编织


再看看这一点,为了避免这个问题,最好在整个应用程序中只使用一种应用方面的方法。

我们可以看到更多的堆栈跟踪吗?您提供的还不够。我将更详细地解释这个问题。我为Bean a定义了aop切入点。我为Bean B定义了aop切入点在上下文文件中的Bean A之后是d。根据我的想象,应该只创建Bean A代理。但是在这种情况下,也创建了Bean B代理,其中包含一个webserivce客户端代理作为参数。这是一种有效的行为。我可以做些什么来避免这种情况吗。这意味着aop只能代理指定的Bean。仍然不够…请不要尝试在您认为堆栈跟踪不再有用时,将其全部添加。”我必须添加SearchDispatchRpcGwtServlet创建SampClass的实例并调用save方法。" ... 您的服务如何创建SampClass的实例?你在玩豆镜吗?这是这些代理错误配置的常见原因。出于好奇,是否有理由不使用“”,而不是手动定义代理?根据您的描述,我想说您的配置中有其他东西导致意外的代理被创建,例如,您没有发现在作用域和加载过程中发生了一些事情,比如servlet上下文。你能用一个小测试程序重现这种行为吗?自动连线并不是创建任何代理。根据javadoc提供连线(包括自动连线)的
AbstractAutowireCapableBeanFactory
正试图通过一个bean处理器创建一个CGLIB代理,它在stacktraceNo中,而不是。。。AbstractAutoProxyCreator的一个子类正在尝试创建代理。此后处理器可能正在通过AOP配置进行注册。堆栈跟踪上存在AbstractAutowireCapableBeanFactory这一事实与问题无关。自动布线和组件扫描是一组未连接到代理的功能。
 <tx:advice id="txAdvice" transaction-manager="jtaTxManager">
  <tx:attributes>
   <tx:method name="*" />
  </tx:attributes>
 </tx:advice>

 <aop:config proxy-target-class="true">
  <aop:pointcut id="fooServiceOperation"
   expression="execution(* x.y.SampClass.save(..))" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation" />
 </aop:config>

 <bean id="Samp1" class=" x.y.SampClass"></bean>

        <bean id="SearchDispatchRpcGwtServlet" class="x.y.server.SearchDispatchRpcGwtServlet">
  <constructor-arg>
       <list>
         <ref bean="webServiceClient"/>                          
       </list>
  </constructor-arg>      
 </bean>

 <!-- Service Clients --> 
 <bean id="webServiceClient" class="x.y.KSBClientProxyFactoryBean">
  <property name="serviceEndpointInterface" value="x.y.service.WebService" />
  <property name="serviceQName" value="{http://x.y.org/wsdl/organization}WebService" />
 </bean>
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class $Proxy117]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy117
    at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:213)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:473)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:348)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:309)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1427)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:139)
    ... 85 more
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy117
    at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)
    at net.sf.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
    at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
    at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
    at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:201)