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; } }