AOP技术原理
AOP在JDK1.3开始被支持,体现在java.lang.reflect.InvocationHandler和Proxy类。对于InvocationHandler的子类,都会被执行invoke方法代替原先的方法。
例如有一个类Service,我们需要在Service的所有方法前加上事务管理代码,那么需要定义一个ServiceProxy继承自InvocationHandler,它包含实例Service。代码如下
public class ServiceProxy implements InvocationHandler{
private Service _service;
private Class interfaceType;
private ServiceProxy(Service service, Class intf) {
service = service;
interfaceType = intf;
}
public static Object newInstance(Class intf, Service service) {
return Proxy.newProxyInstance(service.getClass().getClassLoader(),new Class[]{intf},new ServiceProxy(service, intf)
);
}
public getService
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//加上事务管理代码,然后执行此方法
}
}
还需要一个Bean工厂获得代理的Service
Service service = (Service) ServiceProxy.newInstance(Service.class, new GenericService();
这样,调用Service类之前做任何事情都会被加上事务管理代码