增强类
package com.on.aspect;
public class MyAspect {
public void checkPermissions(){
System.out.println(“模拟检查权限”);
}
public void log(){
System.out.println(“模拟记录日志”);
}
}
Dao业务类
package com.on.dao;
public class Opreate {
public void addUser(){
System.out.println(“添加用户”);
}
public void deleteUser(){
System.out.println(“删除用户”);
}
}
JDK代理类
package com.on.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import com.on.aspect.MyAspect;
import com.on.dao.Opreate;
public class CglibProxy implements MethodInterceptor{
public Object createProxy(Object target){
//创建一个动态类对象
Enhancer enhancer=new Enhancer();
//确定需要增强的类,设置其父类
enhancer.setSuperclass(target.getClass());
//添加回调函数
enhancer.setCallback(this);
//返回创建的代理类
return enhancer.create();
}
@Override
public Object intercept(Object proxy, Method arg1, Object[] args,
MethodProxy methodProxy) throws Throwable {
//创建切面类对象
MyAspect myAspect=new MyAspect();
myAspect.checkPermissions();
Object obj=methodProxy.invokeSuper(proxy, args);
myAspect.log();
return obj;
}
}
测试类
package com.on.test;
import static org.junit.Assert.*;
import com.on.dao.Opreate;
import com.on.jdk.CglibProxy;
public class Test {
@org.junit.Test
public void test() {
//创建代理对象
CglibProxy cglibProxy=new CglibProxy();
//创建对象
Opreate opreate=new Opreate();
Opreate op=(Opreate) cglibProxy.createProxy(opreate);
op.addUser();
op.deleteUser();
}
}