码迷,mamicode.com
首页 > 编程语言 > 详细

Java动态代理

时间:2017-08-12 19:44:46      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:one   row   static   ide   rgs   tproxy   --   tin   ant   

首先我们定义一个接口

技术分享
public interface SayService 
{
    public void say();
}
View Code

接着实现这个接口

技术分享
public class SayImpl implements SayService {

    @Override
    public void say() {
        System.out.println("I want to go shoping.");
    }

}
View Code

定义一个动态代理类了,每一个动态代理类都必须要实现 InvocationHandler 这个接口

技术分享
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class DynamicProxy implements InvocationHandler {

    //我们要代理的真实对象
    private Object object;
    
    public  DynamicProxy(Object object) {
        this.object = object;
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
        System.out.println("before go shoping");
        //当代理对象调用真实对象的方法时,其会自动跳转到代理对象关联的handler对象的invoke方法进行调用
        method.invoke(object, args);
        System.out.println("after go shoping");
        return null;
    }

}
View Code

 

 

定义测试方法

技术分享
public class TestProxy {

    public static void main(String[] args) {
        
        //要代理的对象
        SayService sayImpl = new SayImpl();
        
        //要代理哪个对象,就要将改对象传进去,最后是通过其真实对象来调用方法的
        InvocationHandler handler = new DynamicProxy(sayImpl);
        
        //Proxy.newProxyInstance--创建代理对象
        //handler.getClass().getClassLoader()---加载代理对象
        //sayImpl.getClass().getInterfaces()--为代理对象提供的接口是真实对象所实现的接口,表示我们要代理的是改真实对象,这样我们就能调用接口中的方法
        //handler-关联上的InvocationHandler这个对象
        SayService sayService = (SayService)Proxy.newProxyInstance(handler.getClass().getClassLoader()
                ,sayImpl.getClass().getInterfaces(), handler);
        sayService.say();
        

    }

}
View Code

 控制台打印的日志

before go shoping
I want to go shoping.
after go shoping

 

Java动态代理

标签:one   row   static   ide   rgs   tproxy   --   tin   ant   

原文地址:http://www.cnblogs.com/ts-sd/p/7351183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!