代理模式-动态代理Demo(JDK自带的动态代理)
2017-10-26 17:40
423 查看
1.说明:借用歌星与经济人(代理)在现实生活中的关系来阐述代理模式;
2.代码
2.1明星接口
2.3明星助手类实现java.lang.reflect.InvocationHandler接口,重写其public Object invoke(Object proxy, Method method, Object[] args)方法
3.输出结果:
正真的方法执行前
真正的方法执行后
正真的方法执行前
RealStar(周杰伦).sing()
真正的方法执行后
2.代码
2.1明星接口
public interface Star{ void confer(); void signContract(); void bookTicket(); void sing(); void collectMoney(); }2.2真实明星实现明星接口
package 代理模式1.动态代理; public class RealStar implements Star { @Override public void confer() { // TODO Auto-generated method stub System.out.println("RealStar.confer()"); } @Override public void signContract() { // TODO Auto-generated method stub System.out.println("RealStar.signContract()"); } @Override public void bookTicket() { // TODO Auto-generated method stub System.out.println("RealStar.bookTicket()"); } @Override public void sing() { System.out.println("RealStar(周杰伦).sing()"); } @Override public void collectMoney() { // TODO Auto-generated method stub System.out.println("RealStar.collectMoney()"); } }
2.3明星助手类实现java.lang.reflect.InvocationHandler接口,重写其public Object invoke(Object proxy, Method method, Object[] args)方法
package 代理模式1.动态代理; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class StarHandler implements InvocationHandler{ Star realStar; public StarHandler(Star realStar){ super(); this.realStar = realStar; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object object = null; System.out.println("正真的方法执行前"); if("sing".equals(method.getName())){ object = method.invoke(realStar, args); } System.out.println("真正的方法执行后"); return object; } }2.4在Client类中进行调用
package 代理模式1.动态代理; import java.lang.reflect.Proxy; public class Client { public static void main(String[] args) { Star realStar = new RealStar(); StarHandler handler = new StarHandler(realStar); Star proxy = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class}, handler); //订票 proxy.bookTicket(); //唱歌 proxy.sing(); } }
3.输出结果:
正真的方法执行前
真正的方法执行后
正真的方法执行前
RealStar(周杰伦).sing()
真正的方法执行后
相关文章推荐
- 代理模式(五)JDK动态代理深入分析
- JDK和Cglib动态代理小demo
- Jdk自带的动态代理技术
- java代理Demo——JDK动态代理
- Java动态代理-JDK自带实现
- jdk自带的动态代理
- JDK动态代理--Demo
- jdk动态代理技术demo(干货)
- [置顶] 代理模式(静态代理,jdk动态代理,cglib动态代理)简单易懂的案例
- Dynamic Proxy(JDK自带的动态代理实现)
- Core Java:使用java.lang.reflect实现JDK动态代理的小DEMO
- 关于JDK动态代理的小demo
- JDK自带的动态代理Proxy类和InvocationHandler接口
- JDK动态代理Demo
- 实现动态代理的两种方式介绍+例子demo(JDK、CGlib)
- 好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)
- jdk动态代理和cglib代理demo及总结
- Java 动态代理 (JDK自带代理)
- 代理模式(五)JDK动态代理深入分析
- jdk自带的动态代理说明