0 0

spring强制cglib代理不起作用?0

配置了强制使用cglib,但spring还是使用JDK代理service,所有的service都实现了IGenericService接口,而且在有注入bean的地方,会报错:

Cannot convert value of type [$Proxy10 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,com.xxx.service.IGenericService] to required type [com.xxx.service.impl.UserService] for property 'userService': no matching editors or conversion strategy found

aop的配置:使用的是cglib-nodep-2.1_3.jar

<aop:aspectj-autoproxy proxy-target-class="true"/> 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
       <tx:method name="get*" read-only="true" />
       <tx:method name="find*" read-only="true" />
       <tx:method name="*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
    <aop:config proxy-target-class="true" >
<aop:pointcut id="serviceMethod"
expression="execution(* com.xxx.service.impl..*Service.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>

折腾一天了,不知道问题出在哪里,求指点

问题补充:spring使用版本是3.1.4

问题补充:继承关系:
public class UserService extends GenericServiceImpl<User, Long> {...
父类:
public class GenericServiceImpl<T, ID extends Serializable> implements IGenericService<T,ID>{...
    public GenericServiceImpl() {...

问题补充:application.xml里:
<context:component-scan base-package="org.mtm.framework.ssi">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
dispatch-servlet.xml:
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:component-scan base-package="org.mtm.framework.ssi"  use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
<mvc:annotation-driven/>
项目里一个地方用到了userService:
@Resource
public void setUserService(UserService userService) {
this.userService = userService;
}

问题补充:上面的base-package="org.mtm.framework.ssi"应该是com.xxx,就是和事务包对应的

问题补充:异常信息:
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy10 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,xxxxx.service.IGenericService' to required type 'xxxx.service.impl.UserService' for property 'userService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy10 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,xxxxx.service.IGenericService] to required type [xxxxx.service.impl.UserService] for property 'userService': no matching editors or conversion strategy found
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:485)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:516)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1406)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1365)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
... 88 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [$Proxy10 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,xxxxx.service.IGenericService] to required type [xxxx.service.impl.UserService] for property 'userService': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:247)
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:470)
... 94 more
2013年6月13日 20:48

4个答案 按时间排序 按投票排序

0 0

<aop:aspectj-autoproxy proxy-target-class="true"/>  和 事务的都有配置到application.xml中

2013年6月14日 11:38
0 0

检查下userService这个bean

2013年6月14日 09:37
0 0

是不是覆写了构造方法,请提供一个无参构造方法.

2013年6月14日 00:14
0 0

userService这个bean有没有配置

2013年6月13日 21:44

相关推荐

    spring之AOP(动态代理)

    然而,如果需要更精细的控制,可以通过`@EnableAspectJAutoProxy`注解开启基于AspectJ的自动代理支持,或者通过`proxyTargetClass`属性来强制使用CGLIB代理。 总结一下,Spring的AOP机制通过JDK动态代理和CGLIB动态...

    spring_aop4.rar_Home Home_jar 转换_spring AOP jar

    3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换 如何强制使用CGLIB实现AOP? * 添加CGLIB库,SPRING_HOME/cglib/*.jar * 在spring配置文件中加入&lt;aop:aspectj-...

    springAOP配置动态代理实现

    CGLIB代理提供了更广泛的应用场景,但相比JDK动态代理,它的性能稍差。 3. **代理选择**:Spring默认优先使用JDK动态代理,如果无法满足条件(即目标类没有实现接口),则会自动切换到CGLIB。可以通过配置`proxy...

    spring多个动态代理导致循环依赖报错问题解决

    3. **调整代理模式**:对于CGLIB代理,可以在配置中设置`proxyTargetClass=true`,强制Spring使用CGLIB,即使目标类实现了接口。由于CGLIB创建的是目标类的子类,所以不会导致循环依赖。但是,这可能会引入额外的...

    springioc和spring aop

    在Java中,Spring提供了基于接口的JDK动态代理和基于类的CGLIB代理。JDK动态代理适用于实现了接口的目标对象,它会生成一个代理类,这个代理类同时实现了目标对象的所有接口,并在调用接口方法时插入通知。CGLIB代理...

    Spring第七节课.pdf

    Spring会自动选择合适的代理方式,但也可以通过配置强制使用CGLIB代理。 此外,本文还通过代码示例展示了如何在Spring项目中使用注解进行配置: - 使用@ComponentScan注解指定扫描的包路径,用于自动发现和注册...

    spring面试问答.pdf

    如果目标对象没有实现接口,则Spring默认使用CGLIB代理。在强制使用CGLIB实现AOP时,需要在Spring配置文件中进行配置或通过编程方式引入CGLIB库。 SpringMVC是Spring提供的一个用于Web应用的模型-视图-控制器(MVC...

    Spring源码分析第三阶段

    可以通过配置的proxy-target-class属性来强制使用CGLIB代理。 在Spring源码分析中,理解AOP的设计原理对于理解整个框架的运作非常有帮助。通过AOP,我们可以在不修改源代码的情况下,通过预编译或运行时动态代理的...

    Spring中的5种通知和3种加载通知的方式

    Spring提供两种代理模式:JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的目标类,而CGLIB代理则针对未实现接口的类。默认情况下,Spring会尝试使用JDK代理,如果目标类没有接口,就会自动切换到CGLIB。也可以...

    Spring面试题详细讲解

    Spring面试题详细讲解 Spring 是什么? Spring 是一个轻量级的 ...1. Spring 事务的只读“只读事务”并不是一‘’个强制选项,它只是一个“暗示”,提示数据库驱动程序和数据库系统,这个事务并不包含更改数据的操作

    Spring3.1AOP简单例子

    4. **代理(Proxy)**:Spring提供了两种类型的代理——JDK动态代理和CGLIB代理。前者适用于接口实现类,后者用于没有接口或需要代理的目标类。Spring会自动选择合适的代理方式,但也可以通过配置强制使用某一种。 ...

    25个经典的Spring面试问答.docx

    Spring框架中应用了多种设计模式,如工厂模式(BeanFactory)、单例模式(默认Bean作用域)、装饰器模式(AOP代理)、代理模式(JDK动态代理和CGLIB)、观察者模式(事件发布)等。 以上就是Spring框架的一些核心...

    Spring框架的设计理念与设计模式分析

    4. **轻量级**:Spring不强制使用特定的持久化策略或视图技术,可以与其他框架很好地集成,保持轻量级特性。 5. **可测试性**:Spring通过DI和接口编程提高了代码的可测试性,使得单元测试变得简单,增强了软件的...

    ATSJP#note#Spring之动态代理1

    1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了

    spring入门学习-6、AOP几种配置方式详解.pdf

    - **强制使用 CGLib 代理**:通过设置 `proxyTargetClass` 属性为 `true` 可以强制使用 CGLib 代理。 - **接口指定**:如果目标类实现了多个接口,则可以通过设置 `proxyInterfaces` 属性来指定创建的代理类型。 ##...

    SpringXML方式实现AOP demo

    在XML配置中,可以通过`proxy-target-class="true"`属性来强制使用CGLIB代理。 在提供的压缩包文件中,`.classpath`和`.project`是Eclipse项目的配置文件,`.settings`可能包含了项目的特定设置,而`src`目录则包含...

    Spring基于ProxyFactoryBean创建AOP代理

    Spring 基于 ProxyFactoryBean 创建 AOP 代理 ProxyFactoryBean 是 Spring 中用于创建 AOP 代理的重要工具类,它提供了完整的控制能力,可以生成指定的内容。下面将详细介绍 ProxyFactoryBean 的使用方法和 Spring...

    spring框架学习1

    - 轻量级:Spring不强制使用特定的持久层或视图技术,可以与多种框架集成,如Struts、Hibernate等。 - 无侵入性:Spring的应用对象可以独立于Spring框架存在,只有在需要时才引入Spring的管理。 - 面向接口编程:...

Global site tag (gtag.js) - Google Analytics