Java高级特性之一动态代理
来源:互联网 发布:python string转list 编辑:程序博客网 时间:2024/06/07 06:27
动态代理
什么是代理?
拦截真实业务对象访问,通过返回代理对象去操作!
什么是动态?
在运行时去动态处理真实业务对象的访问
代理对象的职责
1.与真实业务对象具备一样的行为!
比较:卖手机,手机厂商生产手机,它可以自己卖,也可以找一个代理人去帮自己卖!
不论是手机厂商还是代理商都有一样的行为:卖手机
2.代理对象本身没有真实业务对象的行为,只是间接的去访问真实对象的行为(方法)
动态代理是面向接口的,不是面向类的!
注意:
1.代理对象执行方法会调用Invocation invoke方法
2.代理对象执行方法 需要准备 三个参数
3.当代理对象调用final修改的方法时不会调用invoke方法
动态代理实例
1.真实业务
public interface HelloService { String sayHello(String name);}2.真实业务实现public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { System.out.println("hello "+name); return "helloworld"; }}3.代理工厂类
public class HelloProxy { //根据真实helloService对象获得一个代理对象 public static HelloService getProxy(final HelloService helloService) { //返回一个真实对象的代理对象 /** * ClassLoader loader, 真实对象的类加载器 Class<?>[] interfaces, 真实对象的接口 InvocationHandler h 代理响应器 */ //如何获取类加载器 ClassLoader classLoader = helloService.getClass().getClassLoader(); //如何获取真实对象的接口 Class<?>[] interfaces = helloService.getClass().getInterfaces(); Object proxy = Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() { /** * 匿名内部类 * 对于真实业务对象访问,都将执行以下invoke方法 * @param proxy 代理对象 * @param method 执行的真实业务对象的方法 * @param args 执行的真实业务对象方法的参数 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("执行了invoke..."); System.out.println("执行了"+method.getName()); Object res = method.invoke(helloService, args); return res; } }); return (HelloService) proxy; }}4.使用代理类调用方法public class HelloServiceDemo { public static void main(String[] args) { //真实业务对象 HelloService helloService = new HelloServiceImpl(); //通过代理程序获取真实业务的代理对象 HelloService helloProxy = HelloProxy.getProxy(helloService); //用代理对象访问方法 String result = helloProxy.sayHello("jack"); System.out.println(result); }}运行结果
主要关注动态代理类的创建方式!!!
阅读全文
0 0
- Java高级特性之一动态代理
- java高级特性——动态代理
- java 动态代理高级
- java高级---->Java动态代理的原理
- JDK中的动态代理之一
- JDK中的动态代理之一
- Crisis-rpc之一动态代理
- Java 代理,动态代理
- JDK的动态代理特性
- [Java5新特性]动态代理
- java高级语言特性
- java 高级特性
- JAVA基础高级特性
- java的高级特性
- java高级特性
- java高级特性_2
- JAVA高级特性(二)
- JAVA高级特性(二)
- shell 脚本为php 执行订单过期接口
- 界面加载位图
- Linux关于时间同步命令
- [leetcode]312. Burst Balloons
- [SpringMVC] SpringMVC介绍
- Java高级特性之一动态代理
- 现代OpenGL教程-lesson1
- 安卓高级控件之ViewPager
- 设计模式笔记——桥接者模式
- 【Python】 Missing parentheses in call to 'print'
- 如何获取 chosen chosen.jquery.js 选中的值
- SSH—Struts2拦截器的应用(防止未登录用户进行操作)
- 拆装机
- 工作中常用 的自定义函数