- 创建一个 UserService 接口
public interface UserService {
UserService login();
}
- 写一个 UserService 接口的具体实现类 UserServiceImpl
public class UserServiceImpl implements UserService {
@Override
public UserService login() {
System.out.println("登录成功");
return this;
}
}
- 写一个代理类 UserProxy ,这里 实现了 InvocationHandler 接口
创始一个使用jdk的proxy完成动态代理工具类
public class UserProxy implements InvocationHandler {
private Object object;
public UserProxy() {
}
public JdkProxy(Object object) {
this.object = object;
}
//创建代理对象
public Object createProxy() {
// 使用Proxy完成代理对象创建
// 1.得到目标对象的ClassLoader
ClassLoader loader = target.getClass().getClassLoader();
// 2.得到目标对象的实现接口的Class[]
Class[] interfaces = target.getClass().getInterfaces();
// 3.第三个参数需要一个实现了InvocationHandler接口的对象
return Proxy.newProxyInstance(loader, interfaces, this);
}
// 在代理实例上处理方法调用并返回结果。
// 参数1 就是代理对象,一般不使用
// 参数2它调用的方法的Method对象
// 参数3调用的方法的参数
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 功能增强操作
System.out.println("登录前的其他操作....");
method.invoke(object, args);
//返回一个代理对象
return proxy;
}
}
- 编写一个测试类 TestUserProxy
public class TestProxy {
@Test
public void test1() {
// 1.创建目标对象
UserService userService = new UserServiceImpl();
// 2.通过UserProxy完成代理对象创建
UserProxy userProxy = new UserProxy(userService);
UserService proxy = (UserService) userProxy.createProxy();
proxy.login().login();
}
}