本帖最后由 zjyongning 于 2013-03-11 08:53:22 编辑

解决方案 »

  1.   

    [/code]
    异常信息如下:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.greatnin.bigger.dao.SpringHibernateTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.greatnin.bigger.modules.main.dao.UserDao com.greatnin.bigger.dao.SpringHibernateTest.userDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Post-processing of the FactoryBean's object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: 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 com.sun.proxy.$Proxy52
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.greatnin.bigger.modules.main.dao.UserDao com.greatnin.bigger.dao.SpringHibernateTest.userDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Post-processing of the FactoryBean's object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: 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 com.sun.proxy.$Proxy52
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
    ... 26 more
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Post-processing of the FactoryBean's object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: 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 com.sun.proxy.$Proxy52
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:165)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:876)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:818)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
    ... 28 more
    Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: 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 com.sun.proxy.$Proxy52
    at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:213)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:112)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:476)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1598)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:162)
    ... 36 more
    Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52
    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)
    ... 43 more这个是异常信息
      

  2.   

    userDao是接口吗?
    看着错误应该是代理错误,cglib面对具体类代理,不能是接口貌似。jdk的代理面向的是接口代理。
    spring2.5之前的要导入两个代理包,3.0上的导入一个代理包即可。
      

  3.   

    接口是jdk的代理实现。spring是哪个版本的,用最新的版的spring应该就能解决你的问题了。
      

  4.   

    Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52 
    原因是被代理的类为final,CGLib是不能代理final类,或代理被final,private修饰的方法。你看下你的userDAO
      

  5.   

    @Autowired
        private UserDao userDao;
    改为
    @Autowired
        public UserDao userDao;
    试试
      

  6.   

    java能实现多继承!?
    Cannot subclass final class class com.sun.proxy.$Proxy52这个是不说你继承了一个final类吗
      

  7.   

    UserDao:/**
     * 用户DAO接口
     * @author ThinkGem
     * @version 2013-01-15
     */
    @Component
    public interface UserDao extends UserDaoCustom, CrudRepository<User, Long> {

    @Query("from User where loginName = ?1 and delFlag = '" + User.DEL_FLAG_NORMAL + "'")
    public User findByLoginName(String loginName); @Modifying
    @Query("update User set delFlag='" + User.DEL_FLAG_DELETE + "' where id = ?1")
    public int deleteById(Long id);

    @Modifying
    @Query("update User set password=?1 where id = ?2")
    public int updatePasswordById(String newPassword, Long id);

    @Modifying
    @Transactional
    @Query("update User set loginIp=?1, loginDate=?2 where id = ?3")
    public int updateLoginInfo(String loginIp, Date loginDate, Long id);
    }/**
     * DAO自定义接口
     * @author ThinkGem
     */
    interface UserDaoCustom extends BaseDao<User> {}/**
     * DAO自定义接口实现
     * @author ThinkGem
     */
    @Component
    class UserDaoImpl extends BaseDaoImpl<User> implements UserDaoCustom {}
      

  8.   

    重新部署,发布。这个要清理掉以前编译好的class文件。
      

  9.   

    The CGLib proxy is final, so proxying a proxy does not work. You will get an IllegalArgumentException saying “Cannot subclass final class $Proxy0″.意识说代理一个代理无效的
    debug下代码,看看这个Cannot subclass final class class com.sun.proxy.$Proxy52 ,$Proxy52究竟代理的什么对象。为啥要对代理进行代理
      

  10.   

      其实 这个就是问题所在 DEBUG 我只会按 F5 F6 F7   只会看Variables变量值,,然后 我DEBUG出来 
      

  11.   

    我是了  把classes文件全部删除 从新编译  还是一样的
      

  12.   

    这样看,貌似CGLib是通过继承的方式来实现代理的
    楼主的代码中难道出现了重叠代理
      

  13.   

    /**  
    * DAO自定义接口  
    * @author ThinkGem  
    */
    interface UserDaoCustom extends BaseDao<User> {   } 
    难不成这个接口继承有问题?
    这样测试下:让userDao接口不要继承任何接口,只申明一个简单的方法。看看结果如何
    如果可以通过测试,那么在加上你原来的继承,在测试下,看看到底是哪个继承类有问题
      

  14.   

    UserDao有实现类吗??我没看到,我就看到一个UserDao的接口,一个UserDaoImpl extends BaseDaoImpl<User> implements UserDaoCustom!这样的东西,spring能装配进去?还是说我太孤陋寡闻了。。现在spring都这么高级了
      

  15.   

    错误原因:
    Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.greatnin.bigger.modules.main.dao.UserDao com.greatnin.bigger.dao.SpringHibernateTest.userDao;
    你代码里面:
    class UserDaoImpl extends BaseDaoImpl<User> implements UserDaoCustom {   }
    UserDaoImpl 是实现的UserDaoCustom 接口,是哪一个类实现的UserDao???你配置文件怎么注入userDao的??没看到,你贴一下
      

  16.   

    如果你没有启动tomcat 的话。。xml 配置不会加载 也就不会进行注入! 所以 如果要测试注入的话,,你还是写一个 web测试 不要用 @Test   
      

  17.   

    应该是用cglib代理了jdk动态代理的类。
    把 proxy-target-class="true"都去掉看看
      

  18.   

    问题解决情况了,就是莫有设置它的动态代理, 加上代理类 设置成bean就可以了