实现接口,创建代理类
public class CglibProxy implements MethodInterceptor {
//生命一个被代理对象
private Object obj;
public void bind(Object obj){
this.obj=obj;
}
//创建一个方法,返回代理对象
public Object getProxy(){
//创建Enhancer对象
Enhancer enhancer = new Enhancer();
//被代理对象
enhancer.setSuperclass(obj.getClass());
//设置回调
enhancer.setCallback(this);
//返回代理对象.enhancer.create();
return enhancer.create();
}
@Override
public Object intercept(Object sb, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
// TODO Auto-generated method stub
check();
beforeLogging();
Object returnValue = method.invoke(obj, args);
afterLoggging();
return returnValue;
}
//不重复的造轮子 。
public void beforeLogging(){
System.out.println("事前日志 。");
}
public void afterLoggging(){
System.out.println("事后日志。");
}
public void check(){
System.out.println("安全检查。");
}
}
Person类
public class Person {
//吃之前 检查安全性 , 前置日志 核心吃业务 后置日志 。
public void eat(){
System.out.println("吃 。。。");
}
}
创建主方法
public class MainTest {
public static void main(String[] args) {
CglibProxy cp = new CglibProxy();
cp.bind(new Person());
Object proxy = cp.getProxy();//拿到代理对象
Person p = (Person) proxy;
p.eat();
}
}
输出结果:
安全检查。
事前日志 。
吃 。。。
事后日志。