zoukankan      html  css  js  c++  java
  • jdk动态代理

    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了

  • 相关阅读:
    对进程空间的认识
    自己实现智能指针
    实现一个string类
    常见问题总结
    pong game using ncurses
    知识梳理
    经典算法回顾
    自己实现more命令
    表的垂直拆分和水平拆分-zz
    MySQL索引原理及慢查询优化-zz
  • 原文地址:https://www.cnblogs.com/zpitbolg/p/5095307.html
Copyright © 2011-2022 走看看