下面由我来给大家展示用spring aop实现动态代理的例子(电脑打印)
下面就看一下具体的代码:
先定义一个打印机的接口
包aop007_ComPrint; 公共接口打印{ 公共空间ColorPrint ();//彩色打印 公共空间白背景图片();//黑白打印 } >之前然后定义两个实现类,分别实现彩色打印和黑白打印
包aop007_ComPrint; 公共类ColorPrint实现打印{ @Override 公共空间ColorPrint () { System.out.println(“[核心业务逻辑)我是一台彩色打印机!”); System.out.println(“[核心业务逻辑]我主要负责打印彩色资料!”); } @Override 公共空间白背景图片(){//System.out.println(“[核心业务逻辑]我主要负责打印黑白资料!”); } } >之前包aop007_ComPrint; 公共类白背景图片实现打印{ @Override 公共空间白背景图片(){ System.out.println(“[核心业务逻辑)我是一台黑白打印机!”); System.out.println(“[核心业务逻辑]我主要负责打印黑白资料!”); } @Override 公共空间ColorPrint () {//System.out.println(“[核心业务逻辑]我主要负责打印彩色资料!”); } } >之前再定义一个代理类PrintHandler实现动态代理打印功能
包aop007_ComPrint; 进口java.lang.reflect.InvocationHandler; 进口java.lang.reflect.Method; 进口java.util.Date; 公共类PrintHandler实现InvocationHandler {//目标类型不确定 私有对象目标; 公共PrintHandler(对象目标){ 这一点。目标=目标; }/* *返回返回的是原来目标方法所返回的内容方法就是要执行的方法 */@Override 公共对象调用对象代理、方法方法,对象[]args)抛出Throwable { 前();//具体的业务逻辑代码//对象returnPrintObj=目标。//方法用于解释下面一行代码 对象returnPrintObj=方法。调用(目标,args); 后(); 返回returnPrintObj; } 私人空间在(){//前置任务 system . out。println()(新日期); System.out.println(“打印机”); System.out.println(“南方它学院提供!”); } 私人无效后(){//后置任务 System.out.println(“学院打印机”); System.out.println(“请好好爱护,弄坏你可赔不起的哦! ! !”); } } >之前最后就定义一个测试类TestPrint用于测试打印的功能
包aop007_ComPrint; 进口java.lang.reflect.InvocationHandler; 进口java.lang.reflect.Proxy;/* *增加一个【动态代理类,类似与明星的经纪人 *把核心的业务逻辑的代码和非核心的分离 *把非核心的代码交给经纪人(代理)去管理, *注意:经纪人和要明星,必须实现同一个接口 */公开课TestPrint { 公共静态void main (String [] args) {//第一步:创建目标实现类的实例 打印cPrint=new ColorPrint (); 打印wPrint=new白背景图片();//第二步:创建一个动态代理类(CEO首席执行官) InvocationHandler cPrintHandler=new PrintHandler (cPrint); InvocationHandler wPrintHandler=new PrintHandler (wPrint);//第三步:创建动态代理(跟静态代理一样,申明的变量仍然是目标的接口) 打印cPrintProxy=(印刷)Proxy.newProxyInstance (cPrint.getClass () .getClassLoader (), .getInterfaces cPrint.getClass () (), cPrintHandler); 打印wPrintProxy=(印刷)Proxy.newProxyInstance (wPrint.getClass () .getClassLoader (), .getInterfaces wPrint.getClass () (), wPrintHandler); cPrintProxy.ColorPrint ();//对比cPrint.ColorPrint ();(只有核心代码]运行后的区别 System.out.println ("------------------------------"); wPrintProxy.WhitePrint ();//对比wPrint.WhitePrint ();(只有核心代码]运行后的区别 } } >之前到这里就完了,运行结果如下所示:
,
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
利用spring aop实现动态代理