JDK动态代理
动态代理分为jdk的动态代理和cglib动态代理。所谓AOP的拦截功能就是动态代理实现的。即在目标类的基础上增加业务逻辑,生成新的目标类。
这里介绍jdk的动态代理
1.首先目标类要有一个接口,生成的增强类也实现这个接口,是目标类的兄弟类。
2.需要一个实现InvocationHandler接口的类,来告诉通知方法需要加在目标方法的什么地方。
3.最后使用Proxy生成实例化对象,调用增强方法。
举例说明第二步:
public class HandlerTest implements InvocationHandler {
private Object target; //目标类的引用
public HandlerTest(Object object){
this.object = object;
}
public Object invoke(Object proxy, Method method , Object[] ares){
Logger.info("方法开始了");
Object result = method.invoke(target, args );
Logger.info("方法结束了");
return result ;
}
}
第三步,调用方法:
ITarget target = new Target();
HandlerTest handler = new HandlerTest (target);
ITarget proxy = (ITarget)Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
target.getClass().getInterfaces(),
handler
);
proxy.方法名();