高新代理( 四 )


*********************************************************
package cn.itcast.day03.aopframework;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import cn.itcast.day03.Advice;public class ProxyFactoryBean {//私有化private Advice advice;private Object target;public Object getProxy() {//使用Proxy代理类的静态方法newProxyInstance.并实现代理类的三个参数Object proxy3 = Proxy.newProxyInstance(//target的类加载器target.getClass().getClassLoader(),//new Class[]{Collection.class},//target的接口target.getClass().getInterfaces(),//InvocationHandler接口.实现内部类.new InvocationHandler(){//用内部类覆盖InvocationHandler中的方法proxy 代表对象,method,代表对象的方法, args代表参数public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stub//long beginTime = System.currentTimeMillis();//Object retVal = method.invoke(target, args);//long endTime = System.currentTimeMillis();//System.out.println("retVal run of " +(beginTime-endTime));//return retVal;//获取程序开始时间advice.beforeMethod(method);Object retVal = method.invoke(target, args);//获取结束时间advice.afterMethod(method);return retVal;}});return proxy3;}//set和get方法public Advice getAdvice() {return advice;}public void setAdvice(Advice advice) {this.advice = advice;}public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}}
*******************************************
package cn.itcast.day03;import java.lang.reflect.Method;public class MyAdvice implements Advice {long beginTime =0;public void afterMethod(Method method) {// TODO Auto-generated method stubSystem.out.println("传智播客毕业了");long endTime = System.currentTimeMillis();System.out.println("retVal run of " +(beginTime-endTime));}public void beforeMethod(Method method){// TODO Auto-generated method stubSystem.out.println("传智播客开学了");beginTime = System.currentTimeMillis();}}
****************************************************
package cn.itcast.day03;import java.lang.reflect.Method;public interface Advice {void afterMethod(Method method);void beforeMethod(Method method);}
***********************************************************
总结:
AOP 面向方面的编程
涉及到代理
A接口有c方法 , 类B实现A接口 , 原本应该是执行B类中的c方法 , 可现在不这样做;
声明产生B类的代理类B',由它来冒充B类的“兄弟”并“实现”A接口 , 
对外界来说B'应该也有c方法 , 可当真正调用它的时候 , 
它会去执行与它关联的()方法 , 
在这个方法里面你可以做很多事情 。这样 , 这个请求就被“代理”到其它地方去了
***********************************************************