请问我刚做的一个例子 spring整和Hibernate给DAO添加事务代理的时候 要用cglib实现 
以下是applicationContext.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>


<bean id="man" name="man_name" class="springtest.Man">
<property name="message">
<value>你好!cbfg</value>
</property>
</bean>
<bean id="MyuserDAO" class="springdao.MyuserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
    <!-- 声明一个 Hibernate 3 的 事务管理器供代理类自动管理事务用 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="MyuserDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 注意这个属性, 详细意义请参考文章开头的参考资料, 必须为 true 使用CGLIB才不用强制编写DAO接口 -->
<property name="proxyTargetClass">
<value>true</value>
</property> <property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="MyuserDAO" />
</property>
<property name="transactionAttributes">
<props>
<!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>




</beans>最后运行产生以下错误:
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyuserDAOProxy' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError
Caused by: java.lang.NoClassDefFoundError提示找不到MyuserDAOProxy这个类,但教程上说使用CGLIB可以不用强制编写DAO接口,请问该怎么解决?我的测试文件如下:
 MyuserDAOTest.java 要将spring dao,pa字符串插入到数据库中.public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
     MyuserDAO dao = (MyuserDAO)ctx.getBean("MyuserDAOProxy");
     Myuser user = new Myuser();
     user.setUsername("spring dao");
     user.setPassword("pa");
     dao.save(user);

解决方案 »

  1.   

    因为时间原因 没来得及仔细读你的配置信息
    我找到spring源码 的AbstractSingletonProxyFactoryBean,TransactionProxyFactoryBean
    Attribute:proxyTargetClass Not Found!我现在基本上能确定你的
    <property name="proxyTargetClass"> 
    <value>true </value> 
    </property> 
    这部分有问题,关于CGLIB的配置你读一下spring Reference Documentation 关键还在于它的思想
      

  2.   

    包的兼容问题,去掉冗余的cglib相关jar包
      

  3.   

    <bean id="MyuserDAO" class="springdao.MyuserDAO"> 
    看看这个文件存在不?
      

  4.   

    asm包 冲突 去掉那个什么sam-2????忘了
      

  5.   

    去掉asm2.3.1的包,估计你是把整个libary导进去的,里面会把asm的三个包都导进去,要去掉前面说的包
      

  6.   

    3楼说的 对
    我今天都遇到这个问题了
    最后搞了半天终于搞出来了
    如果不是基于接口编程的,就要用proxyTargetClass属性