package com.huxin.dynamic_proxy;
public interface UserService {
public void add(String userId,String name);
public void modify(String userId,String name);
public String findById(String userId);
}
package com.huxin.dynamic_proxy;
public class UserServiceImpl implements UserService {
public void add(String userId, String name) {
System.out.println("add()");
}
public void modify(String userId, String name) {
System.out.println("modify()");
}
public String findById(String userId) {
System.out.println("findById()");
return "王八";
}
}
package com.huxin.dynamic_proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.InputStream;
import org.omg.CORBA.portable.InvokeHandler;
import org.omg.CORBA.portable.OutputStream;
import org.omg.CORBA.portable.ResponseHandler;
public class LogHandler implements InvocationHandler {
private static LogHandler instance = new LogHandler();
private Object targetObject;
private LogHandler(){}
public static LogHandler getInstance(){
return instance;
}
//生成一个动态代理的对象
public Object newDynamicproxy(Object targetObject){
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object object = null;
System.out.println(method.getName()+"方法开始之前被调用"+"参数为:"+ args[0]+args[1]);
//这句话才是真正调用它的方法
object = method.invoke(this.targetObject, args);
System.out.println(method.getName()+"方法开始之后被调用");
return object;
}
}
package com.huxin.dynamic_proxy;
public class Client {
public static void main(String[] args) {
UserService userService = (UserService)LogHandler.getInstance().newDynamicproxy(new UserServiceImpl());
userService.add("1", "hu_xinxin");
}
}