JDK动态代理

本文详细介绍了Java动态代理的实现原理,通过创建接口和实现类,再利用InvocationHandler和Proxy类生成代理对象,展示了如何在不修改原始类的情况下,通过代理类增强功能,实现了无需实现类即可生成代理类的目标。

理解

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

创建接口

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 }

 输出结果

 

转载于:https://www.cnblogs.com/jtfr/p/10982347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值