代理对象2

2018-12-22  本文已影响0人  小竹猫

实现接口,创建代理类

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();
    }
}

输出结果:

安全检查。
事前日志 。
吃 。。。
事后日志。
上一篇 下一篇

猜你喜欢

热点阅读