1. 传统的代理模式。
-
package springAOP; publicclassSubjectProxyimplementsIsubJect{ privateISubject subject; publicStringRequest(){ //add pre-process logicif neccesary subject.request(); //add post process if neccesary } publicISubject getSubject(){ return subject; } publicvoid setSubject(ISubject subject){ this.subject=subject; } }
这种方法缺点是要为每一个被带离对象创建单独的代理类。 在需要代理的功能很多时是一个灾难。
2. 通过java反射机制的动态代理
主要是由java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler接口实现。 具体可以参考其他例子。
该接口必须实现的invoke函数就可以看成是AOP种的Advice
3.通过CGLIB动态生成字节码。 即利用CGLIB生成要被代理的类的子类然后覆写相应方法并插入处理逻辑