Java代理系列-动态代理

动态代理能够作什么?好比说spring的AOP,它就是以动态代理为基础实现的,AOP拦截须要的请求,而后经过代理把请求的结果返回到AOP代理类中,在代理类里就能够作不少本身想要作的事情,好比日志记录,请求参数记录等
java

首先动态代理须要三个实现类,一个测试类spring

接口HelloInterface
ide

接口实现类HelloInterfaceImpl测试

动态代理类HelloDynamicProxythis

测试类HelloTestspa

代码具体实现代理

  • HelloInterface日志

/**
 * Created by liuhj on 2015/12/28.
 */
public interface HelloInterface {
    public void say();
}

HelloInterfaceImplcode

/**
 * Created by liuhj on 2015/12/28.
 */
public class HelloInterfaceImpl implements HelloInterface {
    @Override
    public void say() {
        System.out.println("Hello");
    }
}

HelloDynamicProxyorm

要实现InvocationHandler接口

import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
import java.lang.reflect.Proxy; 

public class HelloDynamicProxy implements InvocationHandler{
	 private Object target;  
    /** 
     * @param target 
     * @return 
     */  
    public Object bind(Object target) {  
        this.target = target;  
        
        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("BEGIN");  
        
        result=method.invoke(target, args);  
        System.out.println("END");  
        return result;  
    }
}

HelloTest

 
public class TestProxy {  
  
    public static void main(String[] args) {  
        HelloDynamicProxy proxy = new HelloDynamicProxy();  
        HelloInterface helloProxy = (HelloInterface) proxy.bind(new HelloInterfaceImpl());  
        helloProxy.say();  
    }  
  
}

输出结果

BEGIN
Hello
END

到此结束了

动态代理和静态代理的区别就是代理中,静态代理是以组合的方式注入到代理类,动态代理则是以反射机制注入到代理类。

才疏学浅,若有错误敬请指出,谢谢。

相关文章
相关标签/搜索