论坛首页 Java版 Spring

spring通过ProxyFactoryBean代理的类无法使用aop:config设置的事务

浏览 1884 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-07-04
spring配置如下:    
xml 代码
 
  1. <aop:config proxy-target-class="true">  
  2.         <aop:advisor pointcut="execution(* com.ss.service..*Service.*(..))"  
  3.                      advice-ref="txAdvice"/>  
  4.     aop:config>  
  5.   
  6.       
  7.     <tx:advice id="txAdvice">  
  8.         <tx:attributes>  
  9.             <tx:method name="get*" read-only="true"/>  
  10.             <tx:method name="find*" read-only="true"/>  
  11.             <tx:method name="add*" read-only="false"/>  
  12.             <tx:method name="update*" read-only="false"/>  
  13.             <tx:method name="delete*" read-only="false"/>  
  14.             <tx:method name="*"/>  
  15.         tx:attributes>  
  16.     tx:advice>  
  17.   
  18.   
  19.   
  20. <bean name="userServiceTarget" class="com.ss.service.impl.UserServiceImpl" />  
  21.       
  22.     <bean id="userService" class="org.springframework.aop.framework.ProxyFactoryBean">  
  23.         <property name="proxyInterfaces"><value>com.ss.service.UserServicevalue>property>  
  24.         <property name="interceptorNames">  
  25.             <list>  
  26.                 <value>enhanceInterceptorvalue>  
  27.                 <value>userServiceTargetvalue>  
  28.             list>  
  29.         property>  
  30.     bean>  

           

       

   


这样配置后报:
17:38:48,416  WARN Cglib2AopProxy:250 - Unable to proxy method [public final voi
d $Proxy19.addRole(com.ss.model.Role) throws java.lang.Exception]
because it is final: All calls to this method via a proxy will be routed directl
y to the proxy.
17:38:48,416  WARN Cglib2AopProxy:250 - Unable to proxy method [public final voi
d $Proxy19.addGroup(com.ss.model.Group) throws java.lang.Exception
] because it is final: All calls to this method via a proxy will be routed direc
tly to the proxy.

去掉事务就好了,好像是代理的类生成方法变成final了,该如何加入事务呢?
   
时间:2007-07-04
你在前面部分(aop:config,tx:advice)使用2.0.x的声明方式,后面部分(ProxyFactoryBean)使用SPring 1.x的用法,这可是个很奇怪的尝试。Spring 2.0.x的声明式配置的资料就这么难找吗?其实Spring自己的参考手册中第9章已经写得很清楚了

关于Spring 2.0.x的声明式事务,可以参考这个帖子:http://movingboy.javaeye.com/post/310183
   
0 请登录后投票
时间:2007-07-05
后面部分(ProxyFactoryBean)
我使用做aop拦截使用的,这部分要做一部分拦截的处理工作和事务没有关系
   
0 请登录后投票
时间:2007-07-05
proxy-target-class="true" 是用 CGLIB 实现代理,他不能覆盖 final 方法,你可以试试把这句去掉用 spring 默认的代理方式,是针对接口代理得。

可以翻翻这里的帖子,好像有贴描述很详细的。
   
0 请登录后投票
时间:2007-07-05
xml 代码
 
  1. <bean id="userService" class="org.springframework.aop.framework.ProxyFactoryBean">  
  2.         <property name="proxyInterfaces"><value>com.ss.service.UserService</value></property>  
  3.         <property name="proxyTargetClass"><value>true</value></property>  
  4.         <property name="target"><ref bean="userServiceTarget" /></property>  
  5.         <property name="interceptorNames">  
  6.             <list>  
  7.                 <value>enhanceInterceptor</value>  
  8.             </list>  
  9.         </property>  
  10.     </bean>  
我这样试了一下就可以了,摸不清头绪
   
0 请登录后投票
时间:2007-07-19
问题出在SpringAop上,我认为是Spring的一个bug,当使用CglibAutoProxy的时候,如果目标对象已经是一个使用jdk动态代理机制创建的对象,那么就会出错,如果这个对象是通过cglib自己生成的proxy对象就没有问题。
CglibAutoProxy这个类有问题,可以考虑给Spring项目提缺陷报告。
   
0 请登录后投票
时间:2007-08-16
现在用cglib自己生成的proxy对象,但是在接口中定义的annotation都获取不到了。应该是生成的对像覆盖了接口的annotation,真是郁闷死了。
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐