现在的位置: 首页 > 编程语言 > 正文

Java动态代理和AOP应用示例

2020年02月14日 编程语言 ⁄ 共 2039字 ⁄ 字号 评论关闭

本文实例讲述了Java动态代理和AOP应用。分享给大家供大家参考,具体如下:

一 点睛

动态代理在AOP(Aspect Orient Program,即面向切面编程)里被称为AOP代理,AOP代理可代替目标对象,AOP代理包含了目标对象的全部方法。但AOP代理中的方法与目标对象的方法存在差异:AOP代理里的方法可以在执行目标方法之前、之后插入一些通用处理。

二 代码

Dog.java

public interface Dog{ // info方法声明 void info(); // run方法声明 void run();}

GunDog.java

public class GunDog implements Dog{ // 实现info()方法,仅仅打印一个字符串 public void info() { System.out.println("我是一只猎狗"); } // 实现run()方法,仅仅打印一个字符串 public void run() { System.out.println("我奔跑迅速"); }}

DogUtil.java

public class DogUtil{ // 第一个拦截器方法 public void method1() { System.out.println("=====模拟第一个通用方法====="); } // 第二个拦截器方法 public void method2() { System.out.println("=====模拟通用方法二====="); }}

MyInvokationHandler.java

import java.lang.reflect.*;public class MyInvokationHandler implements InvocationHandler{ // 需要被代理的对象 private Object target; public void setTarget(Object target) { this.target = target; } // 执行动态代理对象的所有方法时,都会被替换成执行如下的invoke方法 public Object invoke(Object proxy, Method method, Object[] args) throws Exception { DogUtil du = new DogUtil(); // 执行DogUtil对象中的method1。 du.method1(); // 以target作为主调来执行method方法 Object result = method.invoke(target , args); // 执行DogUtil对象中的method2。 du.method2(); return result; }}

MyProxyFactory.java

import java.lang.reflect.*;public class MyProxyFactory{ // 为指定target生成动态代理对象 public static Object getProxy(Object target) throws Exception { // 创建一个MyInvokationHandler对象 MyInvokationHandler handler = new MyInvokationHandler(); // 为MyInvokationHandler设置target对象 handler.setTarget(target); // 创建、并返回一个动态代理 return Proxy.newProxyInstance(target.getClass().getClassLoader() , target.getClass().getInterfaces() , handler); }}

Test.java

public class Test{ public static void main(String[] args) throws Exception { // 创建一个原始的GunDog对象,作为target Dog target = new GunDog(); // 以指定的target来创建动态代理 Dog dog = (Dog)MyProxyFactory.getProxy(target); dog.info(); dog.run(); }}

三 运行

E:\Java\疯狂java讲义\codes\18\18.5\DynaProxy>java Test=====模拟第一个通用方法=====我是一只猎狗=====模拟通用方法二==========模拟第一个通用方法=====我奔跑迅速=====模拟通用方法二=====

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

本文标题: Java动态代理和AOP应用示例

以上就上有关Java动态代理和AOP应用示例的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.