黑马程序员:Java培训、Android培训、iOS培训、.Net培训
JAVA反射-面向方面编程AOP
一、面向方面的需求
有如下模型:
需要统计客户登录时间、使用系统情况,或系统运行日记等信息时,我们就需要到AOP。
二、上述模型可转换为面向对象编程模型:即面向方面编程AOP
客户对任何方法的调用都会重定向到处理器上,这样我们就实现对客户行为的统计。
三、实例代码
1、技术要点:将系统功能(例如:日记、统计等信息)添加代理对象上
2、目标类的实现
public interface Advice{
void beforeLog (Method method);
void afterLog (Method method);
}
public class MyAdvice emplements Advice{
public void beforeLog(Method method){ //打印调用方法的信息
System.out.println(method.getName() + "-Advice-" + "beforeMethod");
}
public void afterLog (Method method){{ //打印调用方法的信息
System.out.println(method.getName() + "-Advice-" + "afterMethod");
}
}
3、袋里类的实现:获得代理对象
class MyProxy{
private static Object getProxy(final Object proxied, final Advice advice){
return Proxy.newProxyInstance(
proxied.getClass().getClassLoader(),
proxied.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
//....
advice.beforeLog (method);
Object retVal = method.invoke(proxiec, args);
advice.afterLog (method);
//....
return retVal;
}
});
}
}
3、main():客户调用
Collection proxied = new ArrayList();
Collection collectionProxy = (Collection)MyProxy.getProxy(proxied , new MyAdvice());
collectionProxy.add("aaa");
collectionProxy.add("ccc");
collectionProxy.add("bbb");
collectionProxy.contains("ccc");