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

JDK动态代理

时间:2019-06-06 00:09:01      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:pre   object   port   技术   system   interface   code   proxy   out   

理解

代理类生成,只要有接口就可以,不需要实现类。

创建接口

1 package com.jtfr;
2 public interface MyInterface {
3     void say();
4 }

创建实现类

1 package com.jtfr;
2 public class MyClass implements MyInterface {
3     public void say() {
4         System.out.println("被代理类");
5     }
6 }

创建InvocationHandler的实现类

 1 package com.jtfr;
 2 import java.lang.reflect.InvocationHandler;
 3 import java.lang.reflect.Method;
 4 import java.lang.reflect.Proxy;
 5 public class MyInvocationHandler implements InvocationHandler{
 6     private static MyInvocationHandler myInvocationHandlerInstance = new MyInvocationHandler();
 7     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 8         System.out.println("进入了代理类");
 9         return null;
10     }
11 //    public static <T> T getProxyInstance(Class<T> cls) {
12 //        return (T)Proxy.newProxyInstance(MyInvocationHandler.class.getClassLoader(), cls.getInterfaces(), myInvocationHandlerInstance);
13 //    }
14     // 充分说明了,代理类不需要实现类也可以。
15     public static <T> T getProxyInstance(Class<T> cls) {
16         return (T)Proxy.newProxyInstance(MyInvocationHandler.class.getClassLoader(), new Class[]{cls}, myInvocationHandlerInstance);
17     }
18 }

测试类

1 package com.jtfr;
2 public class ProxyMain {
3     public static void main(String[] args) {
4         //MyInterface MyInterface = MyInvocationHandler.getProxyInstance(MyClass.class);
5         // 这种方式充分说明了,不需要事先类也可以。
6         MyInterface MyInterface = MyInvocationHandler.getProxyInstance(MyInterface.class);
7         MyInterface.say();// 这里执行,说明进入了代理类, 也就说明了不需要实现类也可以的。
8     }
9 }

 输出结果

技术图片

 

JDK动态代理

标签:pre   object   port   技术   system   interface   code   proxy   out   

原文地址:https://www.cnblogs.com/jtfr/p/10982347.html

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