zpitblog

导航

 

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了

 

posted on 2016-01-02 21:23  zpitblog  阅读(138)  评论(0编辑  收藏  举报