CGLib动态代理

来源:互联网 发布:指南针软件怎么注销 编辑:程序博客网 时间:2024/05/17 09:07

1.相关jar包

cglib-2.2.jar
cglib-nodep-2.2.jar
asm-3.3.1.jar

2.定义Hello接口

public interface Hello {    void say(String name);}

3.Hello接口实现类

public class HelloImpl implements Hello{    @Override    public void say(String name) {        System.out.println("Hello"+name);    }}

4.CGLib代理类

import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CGLibProxy implements MethodInterceptor{    private static CGLibProxy instance = new CGLibProxy();    private CGLibProxy() {}    public static CGLibProxy getInstance(){        return instance;    }    @SuppressWarnings("unchecked")    public <T> T getProxy(Class<T> cls){        return (T) Enhancer.create(cls, this);    }    @Override    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {        before();        Object result = proxy.invokeSuper(obj, args);        after();        return result;    }    private void before() {        System.out.println("before");    }    private void after() {        System.out.println("after");    }}

5.main

public class Main {    public static void main(String[] args) {        Hello helloProxy = CGLibProxy.getInstance().getProxy(HelloImpl.class);        helloProxy.say("ke");    }}

参考《架构探险 从零开始写Java Web框架》

原创粉丝点击