實(shí)現(xiàn)接口,創(chuàng)建代理類
public class CglibProxy implements MethodInterceptor {
//生命一個(gè)被代理對(duì)象
private Object obj;
public void bind(Object obj){
this.obj=obj;
}
//創(chuàng)建一個(gè)方法,返回代理對(duì)象
public Object getProxy(){
//創(chuàng)建Enhancer對(duì)象
Enhancer enhancer = new Enhancer();
//被代理對(duì)象
enhancer.setSuperclass(obj.getClass());
//設(shè)置回調(diào)
enhancer.setCallback(this);
//返回代理對(duì)象.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;
}
//不重復(fù)的造輪子 。
public void beforeLogging(){
System.out.println("事前日志 。");
}
public void afterLoggging(){
System.out.println("事后日志。");
}
public void check(){
System.out.println("安全檢查。");
}
}
Person類
public class Person {
//吃之前 檢查安全性 尺栖, 前置日志 核心吃業(yè)務(wù) 后置日志 。
public void eat(){
System.out.println("吃 。废境。。");
}
}
創(chuàng)建主方法
public class MainTest {
public static void main(String[] args) {
CglibProxy cp = new CglibProxy();
cp.bind(new Person());
Object proxy = cp.getProxy();//拿到代理對(duì)象
Person p = (Person) proxy;
p.eat();
}
}
輸出結(jié)果:
安全檢查筒繁。
事前日志 噩凹。
吃 。毡咏。驮宴。
事后日志。