定义一个接口
package example2;
public interface UserService {
void login(String loginName, String passWord) throws Exception;
void deleteUsers() throws Exception;
String[] selectUsers() throws Exception;
}
接口的实现类
package example2;
public class UserServiceImpl implements UserService {
@Override
public void login(String loginName, String passWord) throws Exception {
//long startTime = System.currentTimeMillis();
if ("admin".equals(loginName) && "123456".equals(passWord)) {
System.out.println("密码正确,登录成功!");
} else {
System.out.println("密码错误!登录失败");
}
Thread.sleep(1000);
//long endTIme = System.currentTimeMillis();
//System.out.println("login方法执行了" + (endTIme - startTime) / 1000.0 + "s");
}
@Override
public void deleteUsers() throws Exception {
//long startTime = System.currentTimeMillis();
System.out.println("删除了1w个用户");
Thread.sleep(2000);
//long endTIme = System.currentTimeMillis();
//System.out.println("deleteUsers方法执行了" + (endTIme - startTime) / 1000.0 + "s");
}
@Override
public String[] selectUsers() throws Exception {
//long startTime = System.currentTimeMillis();
System.out.println("删除了3个用户");
String[] names = new String[]{"张三", "李四", "王五"};
Thread.sleep(500);
//long endTIme = System.currentTimeMillis();
//System.out.println("selectUsers方法执行了" + (endTIme - startTime) / 1000.0 + "s");
return names;
}
}
生成代理
package example2;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyUtil {
public static UserService createProxy(UserService userService) {
UserService userServiceProxy = (UserService) Proxy.newProxyInstance(
ProxyUtil.class.getClassLoader(),
new Class[]{UserService.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("login") || method.getName().equals("deleteUsers") || method.getName().equals("selectUsers")) {
long startTime = System.currentTimeMillis();
Object res = method.invoke(userService, args);
long endTIme = System.currentTimeMillis();
System.out.println(method.getName() + "方法执行了" + (endTIme - startTime) / 1000.0 + "s");
return res;
}else {
Object res = method.invoke(userService, args);
return res;
}
}
}
);
return userServiceProxy;
}
}
测试
package example2;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws Exception {
//创建用户业务对象
//UserService userService = new UserServiceImpl();
UserService userService = ProxyUtil.createProxy(new UserServiceImpl());
//调用业务的功能
userService.login("admin", "123456");
System.out.println("----------------------------------");
userService.deleteUsers();
System.out.println("-----------------------------------");
String[] names = userService.selectUsers();
System.out.println("查询到的用户有" + Arrays.toString(names));
System.out.println("----------------------------------------");
}
}