java代理课程测试 spring AOP代理简单测试(三)

2014-11-24 08:34:23 · 作者: · 浏览: 8
-------");
System.out.println(coll.size());
}
/**
* 代理处理方法 返回处理后的对象
* @param target 目标对象
* @param advice 通告
* @return
*/
public static Object getProxy(final Object target,final Advice advice){
Object proxyObj=Proxy.newProxyInstance(
target.getClass().getClassLoader()//类加载器
, target.getClass().getInterfaces()//参数类型
,new InvocationHandler() {//调用方法进行处理
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//代理功能处理 把方法交给它进行处理
advice.beforeMethod(method);
//处理自已的方法
Object returnObj=method.invoke(target, args);
advice.afterMethod(method);
//返回处理后的对象
return returnObj;
}
});
return proxyObj;
}
}
//spring AOP 简单的实现例子
[java]
package com.AopFramework;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import com.proxyTest.Advice;
public class FactoryBean {
Properties pro=new Properties();
public FactoryBean(InputStream is){
try {
pro.load(is);//加载数据流得到配制信息
} catch (IOException e) {
e.printStackTrace();
}
}
//通过Key获取对象
public Object getBean(String name){
//通过Key获取类路径
String classPath=pro.getProperty(name);
Object bean=null;
try {
//获取类的字节码
Class clazz=Class.forName(classPath);
//得到对象实例
bean=clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//如果是代理对象则返回代理对象
if(bean instanceof ProxyFactoryBean){
//强转为代理对象
ProxyFactoryBean proxyFactoryBean=(ProxyFactoryBean)bean;
Object ProxyBean = null;
try {
//获取功能对象
Advice advice=(Advice) Class.forName(pro.getProperty(name+".advice")).newInstance();
//目标对象
Object target= Class.forName(pro.getProperty(name+".target")).newInstance();
proxyFactoryBean.setAdvice(advice);//为代理对象加入 功能对象
proxyFactoryBean.setTarget(target);//加入目标对象
//get代理对象
ProxyBean = proxyFactoryBean.getProxy();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回代理对象
return ProxyBean;
}
//返回没有代理过的对象
return bean;
}
}
[java]
package com.AopFramework;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Properties;
import com.proxyTest.Advice;
public class ProxyFactoryBean {
private Advice advice;//代理通告对象
private Object target;//代理目标对象
/**
* 代理处理方法 返回处理后的对象
* @para