使用CGlib的动态代理,只需要引进spring的核心包,因为spring的核心中已经集成了CGLib
ProductDao类:
public class ProductDao {
public void add() {
System.out.println("添加产品");
}
public void update() {
System.out.println("更新产品");
}
}
生成CGLib动态代理:
public class CGLibProxy implements MethodInterceptor{
private ProductDao productDao;
public CGLibProxy(ProductDao productDao) {
this.productDao=productDao;
}
public ProductDao createProxy() {
//使用CGLib生成代理
//创建核心类
Enhancer enhancer=new Enhancer();
//为其设置父类
enhancer.setSuperclass(productDao.getClass());
//设置回调
enhancer.setCallback(this);
//创建代理
return (ProductDao) enhancer.create();
}
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
if("add".equals(method.getName())) {
System.out.println("日志信息=========");
Object obj=methodProxy.invokeSuper(proxy, args);
return obj;
}
return methodProxy.invokeSuper(proxy, args);
}
}
测试类:
public class Test {
public static void main(String[] args) {
ProductDao productDao=new ProductDao();
ProductDao proxy=new CGLibProxy(productDao).createProxy();
proxy.add();
proxy.update();
}
}