Java动态代理和AOP应用示例

本文实例讲述了Java动态代理" title="动态代理">动态代理和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应用示例 的全部内容, 来源链接: utcz.com/z/328451.html

回到顶部