JDK动态代理--Demo
来源:互联网 发布:淘宝卖家退款要验证码 编辑:程序博客网 时间:2024/05/22 05:22
Java代理有JDK动态代理、CGLIB代理,这里只说下JDK动态代理,JDK动态代理主要使用的是JAVA反射机制(既java.lang.reflect包)
原理是(歌手、经纪人做例子):
建立一个公共的接口,比如:歌手public interface Singer;
用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer
建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invoke方法
这样当有什么事情,要找周杰伦(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行)。
代码:
1、歌手接口
package proxy;public interface Singer {public abstract void sing();}
2、具体的歌手
package proxy;public class MySinger implements Singer {@Overridepublic void sing() {System.out.println("I' m Jay Chou, and I'm singing Simple Love.");}}
3、代理类(经纪人)
package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class Agent implements InvocationHandler {private Singer singer;public Agent(Singer singer) {this.singer = singer;}public Agent() {}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {String methodName = method.getName();Object obj = null;if ("sing".equals(methodName)) {System.out.println("事务开始");System.out.println("权限认证");// obj =method.invoke(singer, args);System.out.println("事务结束");}return obj;}}
4、测试(为什么要间接口能,下面你会发现代理返回的是他们的接口类,这要一个代理类,就可以代理多个类,只要该类是同个一个接口的是实现)
package proxy;import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {Agent agent = new Agent(new MySinger());Singer singer = (Singer) Proxy.newProxyInstance(Singer.class.getClassLoader(), new Class[] { Singer.class },agent);singer.sing();}}
0 0
- JDK动态代理--Demo
- JDK动态代理Demo
- JDK和Cglib动态代理小demo
- jdk动态代理技术demo(干货)
- 关于JDK动态代理的小demo
- java代理Demo——JDK动态代理
- jdk动态代理和cglib代理demo及总结
- 代理模式-动态代理Demo(JDK自带的动态代理)
- Java动态代理Demo
- java动态代理demo
- 代理模式,JDK动态代理
- Java动态代理--jdk代理
- 代理模式-JDK动态代理
- JDK中的动态代理
- JDK动态代理
- JDK动态代理
- JDK动态代理
- jdk动态代理(暂)
- Poi导出excel设置单元格数值格式
- 黑马程序员07_基础加强01
- 阿里巴巴面试题目集合
- 我的java学习日记(3)
- NDK与java传递中文字符的解决办法
- JDK动态代理--Demo
- linux内核锁机制-不可睡眠锁之RCU
- 4.0 编译apk中无classes.dex问题解决方法
- sql之left join、right join、inner join的区别
- json对象创建
- SERC2013 J You Win!
- JBoss下EJB3.x简单环境搭建实例
- 时间复杂度
- 【可变参数】数组赋给可变参数,采取的策略是【拆】,简单数据类型数组看成是一个对象