Java自带的动态代理小记
2018-03-07 09:43
295 查看
简要说明
动态代理的目的是拦截被代理的对象,完成特定的功能需求,比如日志拦截,事务处理等等;JDK PROXY实例一
1)被代理对象代码
/** * 打印接口 * @version 1.0 * @author yangyl * @createDate 2018年3月7日 */ public interface Printer { public void print(String content); }
2)被代理对象实现类
/** * * * 打印接口实现类 * @version 1.0 * @author yangyl * @createDate 2018年3月7日 * @since JDK 1.8 */ public class PrinterImpl implements Printer { public void print(String content){ System.out.println("I print content is :"+content); } }
3)代理调用回调类
public static class PrintProxyHandler implements InvocationHandler{ private Printer print; public PrintProxyHandler(Printer print) { super(); this.print = print; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("我是方法调用前的内容."); Object result = method.invoke(print, args); return result; } }
4)测试Main方法
public static void main(String[] args) { //被代理对象--原对象 Printer printer=new PrinterImpl(); //代理回调对象 InvocationHandler myInvocationHandler=new PrintProxyHandler(printer); printer =(Printer) Proxy.newProxyInstance(Printer.class.getClassLoader(), printer.getClass().getInterfaces(), myInvocationHandler); printer.print("打印内容.."); }
5) 执行结果说明
可以看出,在调用代理对象接口的方法时,调用了我们自定义的回调方法;实现方法的拦截处理;
重要说明下:被代理接口Printer可以没有实现类,完成代理回调;在mybatis中的接口的实例化可以看出有明显应用;
1) mybatis的接口实现实例代码
public static class PrintProxyHandler2 implements InvocationHandler{ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("我是方法调用前的内容."); Object result=null; System.out.println("此处完成别的目的..."); return result; } }2) 测试方法及结果说明
public static void main(String[] args) { //代理回调对象 InvocationHandler myInvocationHandler=new PrintProxyHandler2(); //被代理接口,着重说下,接口可以没有实现 Class<?>[] interfaces=new Class[] {Printer.class}; Printer printer = (Printer) Proxy.newProxyInstance(Printer.class.getClassLoader(), interfaces, myInvocationHandler); printer.print("打印内容.."); }
可以看出:在没有接口的实现的情况下,完成的接口的代理功能;
相关文章推荐
- Java动态代理-JDK自带实现
- Java 动态代理 (JDK自带代理)
- 好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)
- java动态代理一(java自带动态代理)
- JAVA中的动态代理和AOP编程思想
- Spring AOP之 java 动态代理(Proxy 与 InvocationHandler)理解
- java [ 静态(接口)代理 ,动态(接口)代理,CglibProxy动态(实体类)代理]
- Java 动态代理以及Cglib代理
- java动态代理模式
- JAVA AOP 动态代理 的例子
- 深入理解JAVA JDK动态代理机制
- java反射和动态代理实现接口记录
- Java程序员从笨鸟到菜鸟之(三十九)大话设计模式(七)代理模式和java动态代理机制
- java设计模式之代理模式,java动态代理
- JAVA JDK CGLIB 动态代理 比较
- <JAVA与模式>之动态代理
- java动态代理记录
- Java动态代理
- java的动态代理机制详解