CGLib动态代理,按照课本上打的代码,运行报以下错误
提供以下代码,请问有没有大佬为我答疑解惑,新手太迷糊不会弄。
UserDao.java
package com.itheima.demo02;
/*目标类*/
public class UserDao {
public void addUser(){
System.out.println("添加用户");
}
public void deleteUser(){
System.out.println("删除用户");
}
}
CglibProxy.java
package com.itheima.demo02;
import java.lang.reflect.Method;
import com.itheima.demo01.MyAspect;
import org.springframework.cglib.proxy.Enhancer;
import org.aopalliance.intercept.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
//代理类
public class CglibProxy implements MethodInterceptor {
//代理方法
public Object createProxy(Object target){
//创建一个动态类对象
Enhancer enhancer = new Enhancer();
//确定需要增强的类,设置其父类
enhancer.setSuperclass(target.getClass());
//添加回调函数
enhancer.setCallback(this);
//返回创建的代理类
return enhancer.create();
}
/*
* proxy CGlib根据指定父类生成的代理对象
* method拦截的方法
* methodProxy方法的代理对象,用于执行父类的方法
* */
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
//创建切面类对象
MyAspect myAspect = new MyAspect();
myAspect.check_Permissions();
//目标方法执行
Object obj = methodProxy.invokeSuper(proxy,args);
//后增强
myAspect.log();
return obj;
}
}
CglibTest.java
package com.itheima.demo02;
//测试类
public class CglibTest {
public static void main(String[] args){
//创建代理对象
CglibProxy cglibProxy = new CglibProxy();
//创建目标对象
UserDao userDao = new UserDao();
//获取增强后的目标对象
UserDao userDao1 = (UserDao)cglibProxy.createProxy(userDao);
//执行方法
userDao1.addUser();
userDao1.deleteUser();
}
}