java动态代理

动态代理是java的一大特性,它的优势在于可以实现无侵入式的代码扩展。

动态代理主要可以用来做方法的增强,可以在不修改源码的情况下,增强一些方法,在方法执行前后做你任何想做的事情(甚至不需要执行主体方法)。

Spring中的AOP实现原理就是通过动态代理实现的。

话不多说,直接上代码了。。

public interface WriteCode {
    
    public void writeCode();
    
}

public class WriteCodeImpl implements WriteCode {

    @Override
    public void writeCode() {
        System.out.println("write code...");
    }

}
public class WriteCodeProxy implements InvocationHandler {
    
    private Object target;
    
    public WriteCodeProxy(Object target) {
        this.target = target;
    }
    
    public Object bind(){
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object result = null;
        System.out.println("write code begin...");
        result=method.invoke(target, args);
        System.out.println("write code end...");
        return result;
    }

}
public class TestProxy {

    public static void main(String[] args) {
        WriteCodeProxy proxy = new WriteCodeProxy(new WriteCodeImpl());
        WriteCode wc = (WriteCode) proxy.bind();
        wc.writeCode();
    }

}



你可能感兴趣的:(java)