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了

  • 相关阅读:
    sublime text3配置javascript运行环境
    TCP/IP协议详解
    markdown基本语法
    pytest失败重跑
    pytest参数化
    Httprunner初步学习
    基础面向对象
    面试题
    包和loggging模块
    常用模块
  • 原文地址:https://www.cnblogs.com/zpitbolg/p/5095307.html
Copyright © 2011-2022 走看看