tomcat源码分析3—>代理模式深入分析
2017-12-26 11:07
363 查看
java动态代理:
hello接口
HelloImp实现
通过查看Proxy源码可以知道,proxy通过newProxyInstance生成代理类:1、该类包含了接口所有的方法;2、该类所有的方法调用会被分发到dynamicProxy类上(Method是被调用的方法信息的封装);3、method.invoke(target, args)会在被代理类上寻找是否有该方法的信息,如果有那么就调用。
上述是动态代理的核心要点
总结:Method、Class这些是描述对象的对象,是属于“元”素据,代理通过对对象的元数据在运行时进行查找分析等实现了Java的反射机制和动态代理(PS:元数据是描述对象的数据,所以可以通过元数据生成相应的对象)
hello接口
public interface Hello { void sayHello(); }
HelloImp实现
public class HelloImp implements Hello { public void sayHello() { System.out.println("你好,世界!"); } }
public class MDynamicProxy implements InvocationHandler { private Object target; public MDynamicProxy(Object target){ this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { beforeInvoke(); Object result = method.invoke(target, args); afterInvoke(); return result; } private void beforeInvoke(){ System.out.println("方法执行之前"); } private void afterInvoke(){ System.out.println("方法执行之后"); } }
@Test public void test1(){ // 需求代理的类 Hello hello = new HelloImp(); // 方法拦截器 MDynamicProxy dynamicProxy = new MDynamicProxy(hello); /** * 包含了方法拦截器的代理 * 该代理类的所有的可执行的方法都会被dynamicProxy拦截 * 所以dynamicProxy《拦截了所有的方法》之后,再根据《方法名》 * 去找到被代理类的相应的方法名,并执行响应的方法 */ Hello helloProxy = (Hello) Proxy.newProxyInstance( hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), dynamicProxy ); System.out.print("代理之前:"); hello.sayHello(); System.out.print("代理之后:"); helloProxy.sayHello(); }
通过查看Proxy源码可以知道,proxy通过newProxyInstance生成代理类:1、该类包含了接口所有的方法;2、该类所有的方法调用会被分发到dynamicProxy类上(Method是被调用的方法信息的封装);3、method.invoke(target, args)会在被代理类上寻找是否有该方法的信息,如果有那么就调用。
上述是动态代理的核心要点
总结:Method、Class这些是描述对象的对象,是属于“元”素据,代理通过对对象的元数据在运行时进行查找分析等实现了Java的反射机制和动态代理(PS:元数据是描述对象的数据,所以可以通过元数据生成相应的对象)
相关文章推荐
- tomcat源码分析3—>cglib动态代理深度解析
- tomcat源码分析(4)—>servlet深入分析(部分关键类的描述)
- tomcat源码分析(4)—>servlet深入分析
- Java源码分析:深入探讨Iterator模式 (转)
- Tomcat源码深入——Servlet容器之外观模式
- Java源码分析:深入探讨Iterator模式
- 深入理解Spark 2.1 Core (六):Standalone模式运行的原理与源码分析
- JAVA的代理模式与动态代理深入分析
- Spring源码分析--代理模式、工厂模式
- Java源码分析:深入探讨Iterator模式
- ubuntu apt-get 代理模式深入分析
- Java源码分析:深入探讨Iterator模式及Java 5.0中改进的for循环
- Java源码分析:深入探讨Iterator模式
- Java源码分析:深入探讨Iterator模式
- Java源码分析:深入探讨Iterator模式
- Java源码分析:深入探讨Iterator模式
- Java源码分析:深入探讨Iterator模式
- tomcat源码---->request的请求参数分析
- 设计模式 --> 代理模式(一)(高清多图,源码模拟)
- Java源码分析:深入探讨Iterator模式