| 1) 代理对象,不需要实现接口,但是目标对象要实现接口,否则不能用动态代理 |
| 2) 代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象 |
| 3) 动态代理也叫做:JDK代理、接口代理 |
| |
| 1) 代理类所在包:java.lang.reflect.Proxy |
| 2) JDK实现代理只需要使用newProxyInstance方法,但是该方法需要接收三个参数,完整的写法是: |
| static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h ) |

| package com.atguigu.proxy.dynamic; |
| |
| public interface ITeacherDao { |
| void teach(); |
| void sayHello(String name); |
| } |
| |
| package com.atguigu.proxy.dynamic; |
| public class TeacherDao implements ITeacherDao { |
| |
| @Override |
| public void teach() { |
| |
| System.out.println(" 老师授课中.... "); |
| } |
| |
| @Override |
| public void sayHello(String name) { |
| |
| System.out.println("hello " + name); |
| } |
| |
| } |
| |
| package com.atguigu.proxy.dynamic; |
| import java.lang.reflect.InvocationHandler; |
| import java.lang.reflect.Method; |
| import java.lang.reflect.Proxy; |
| public class ProxyFactory { |
| |
| |
| private Object target; |
| |
| |
| public ProxyFactory(Object target) { |
| this.target = target; |
| } |
| |
| |
| public Object getProxyInstance() { |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| return Proxy.newProxyInstance(target.getClass().getClassLoader(), |
| target.getClass().getInterfaces(), |
| new InvocationHandler() { |
| @Override |
| public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { |
| |
| System.out.println("JDK代理开始~~"); |
| |
| Object returnVal = method.invoke(target, args); |
| System.out.println("JDK代理提交"); |
| return returnVal; |
| } |
| }); |
| } |
| |
| } |
| |
| package com.atguigu.proxy.dynamic; |
| public class Client { |
| |
| public static void main(String[] args) { |
| |
| |
| ITeacherDao target = new TeacherDao(); |
| |
| ITeacherDao proxyInstance = (ITeacherDao)new ProxyFactory(target).getProxyInstance(); |
| |
| System.out.println("proxyInstance=" + proxyInstance.getClass()); |
| |
| |
| proxyInstance.sayHello(" tom "); |
| } |
| |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-31 vue开发:前端项目模板