面向切面编程二
来源:互联网 发布:淘宝上的汉斯格雅花洒 编辑:程序博客网 时间:2024/04/30 04:44
上一篇是对一个具体的类切面编程实现,现在将其抽象出来,利用java的动态代理特性实现切面编程。类图如下
定义了Before和After泛型接口,DynamicProxy类实现切面编程功能,继承自InvocationHandler接口。
Before接口
public interface Before<T> { public boolean before(T...args);}
BeforeDivide实现Before接口
public class BeforeDivide implements Before{ //除法参数的验证 @Override public boolean before(Object... args) { if((Integer)args[1]==0) return false; else return true; }}
After接口
public interface After<T> { public void after(T...args);}
AfterDivide实现After接口
public class AfterDivide implements After{ //输出结果 @Override public void after(Object... args) { System.out.println("结果是:"+args[0]); }}
DynamicProxy类
public class DynamicProxy implements InvocationHandler{ private Object obj; private Before be; private After af; public DynamicProxy(Object obj,Before be,After af){ this.obj=obj; this.be=be; this.af=af; } @SuppressWarnings("unchecked") public <T> T getProxy(){ return (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { if(be.before(arg2)==false){ System.out.println("没有通过验证"); return 0; } Object result=arg1.invoke(obj, arg2); af.after(result); return result; }}
客户端调用
public static void main(String args[]){ Calculator div=new DynamicProxy(new CalculatorImpl(), new BeforeDivide(), new AfterDivide()).getProxy(); div.divide(1, 1); }
利用java动态代理的方法可以实现切面编程,只需要便携before和after接口的实现类,便可以完成自己想要在代码执行前和执行后插入自己想要执行的功能。
0 0
- 面向切面编程二
- 面向切面编程(二)
- Spring面向切面编程二
- 达内云笔记(二) AOP面向切面编程
- 面向切面编程
- AOP,面向切面编程
- AOP面向切面编程
- 面向切面编程 (AOP)
- AOP--面向切面编程
- AOP面向切面编程
- AOP面向切面编程
- 面向切面编程
- 面向切面编程
- 面向切面编程
- AOP面向切面编程
- AOP面向切面编程
- JavaScript面向切面编程
- Spring面向切面编程
- RxJava操作符(六)Utility
- “内存泄露”问题的分析和解决方法
- APK程序的运行过程
- 使用mplayer播放音乐时警告“mplayer can't open audio device /dev/dsp”
- Android事件分发机制浅析
- 面向切面编程二
- jQuery 向 servlet 发送和接受JSON数据。
- 循环名标签+break、continue控制内外层循环结构
- HI3520D在内核中复用UART2,UART3管脚
- JAVA中常用集合
- SubString
- RxJava操作符(七)Conditional and Boolean
- Android之Loader加载功能
- ActiveMQ 总结(1)