public class ServiceProxy implements InvocationHandler{
/**目标对象*/
private Object targetObj;
public ServiceProxy(Object targetObj) {
this.targetObj = targetObj;
}
/**
* 产生一个代理对象
* @return 代理对象
*/
public Object getProxy() {
//产生代理对象,第一个参数为目标对象的类加载器,第二个参数为目标对象实现的接口列表,第三个参数为InvocationHandler的实现类
//当调用代理对象方法时,会执行InvocationHandler实现类的invoke方法
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),
targetObj.getClass().getInterfaces(), this);
}
/**
* proxy 代理对象,method 目标方法对象,args 目标方法执行时传入的实参列表
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//得到目标对象的属性列表
Field[] f = targetObj.getClass().getDeclaredFields();
for (Field field : f) {
//类型是否为接口
if(field.getType().isInterface()) {
//产生实现类对象
Object implObj = DaoFactory.getBean(field.getType().getSimpleName());
field.setAccessible(true);
field.set(targetObj, implObj);
}
}
//执行目标对象的目标方法,得到目标方法执行后的返回结果
Object returnObj = method.invoke(targetObj, args);
return returnObj;
}
}