软件编程
位置:首页>> 软件编程>> java编程>> Java动态 代理和AOP应用示例

Java动态 代理和AOP应用示例

作者:cakincqm  发布时间:2023-11-26 07:45:02 

标签:Java,动态,代理,AOP

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

一 点睛

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

Java动态 代理和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程序设计有所帮助。

来源:https://blog.csdn.net/chengqiuming/article/details/94997253

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com