版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
ProductDao 类
package com.shunli.ioc.demo5;
public class ProductDao {
public void save() {
System.out.println("save........");
}
public void update() {
System.out.println("update........");
}
public void find() {
System.out.println("find........");
}
public void delete() {
System.out.println("delete........");
}
}
MyCglibProxy
package com.shunli.ioc.demo5;
import java.lang.reflect.Method;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
public class MyCglibProxy implements MethodInterceptor{
private ProductDao productDao;
public MyCglibProxy(ProductDao productDao) {
this.productDao = productDao;
}
public Object CreateProxy() {
//1、创建核心类
Enhancer enchEnhancer = new Enhancer();
//2、设置父类
enchEnhancer.setSuperclass(productDao.getClass());
//3、设置回调
enchEnhancer.setCallback(this);
//4、生成代理
Object proxy = enchEnhancer.create();
return proxy;
}
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
if("update".equals(arg1.getName())) {
System.out.println("调用update前调用此方法");
}
return arg3.invokeSuper(arg0, arg2);
}
}
dmeo
package com.shunli.ioc.demo5;
import org.junit.Test;
public class Demo {
@Test
public void demo2() {
ProductDao productDao = new ProductDao();
ProductDao proxy = (ProductDao)new MyCglibProxy(productDao).CreateProxy();
proxy.save();
proxy.update();
proxy.find();
proxy.delete();
}
}
输出