码迷,mamicode.com
首页 > 其他好文 > 详细

jdk动态代理

时间:2016-01-02 22:32:19      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

spring的aop一部分是用jdk动态代理实现的,jdk动态代理需要被代理的类是接口的实现

首先定义接口

public interface Animals {

    public void run();
    
    
    public void stop();
    
}

 

然后是实现类

public class Dog implements Animals{

    @Override
    public void run() {
        System.out.println("the dog is run...");        
    }

    @Override
    public void stop() {
        System.out.println("the dog is top...");
    }

}

 

然后实现handler

public class InvokeHandler implements InvocationHandler{

    private Object target;
    
    public InvokeHandler(Object target){
        this.target=target;
    }
    
    @Override
    public Object invoke(Object proxyObject, Method method, Object[] args)
            throws Throwable {
        System.out.println("begin...................");
        Object result=method.invoke(target, args);
        System.out.println("end.......................");
        return result;
    }    
}

 

然后测试代理

public class Client {

    public static void main(String [] sds){
        Dog dog=new Dog();
        InvokeHandler handler=new InvokeHandler(dog);
        //生成代理对象
        Animals animals=(Animals) Proxy.newProxyInstance(dog.getClass().getClassLoader(),dog.getClass().getInterfaces(), handler);
         
        animals.run();
        
        animals.stop();
    }
    
}

 

其实sprng 也是大致这样实现的,spring的容器里面并不是我们原始的bean实例,而是代理后的bean。在我们调用bean的方法的时候,

可以在方法前后做各种操作就是aop了

 

jdk动态代理

标签:

原文地址:http://www.cnblogs.com/zpitbolg/p/5095307.html

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