先看代码,认识如下什么是静态代理bash
/**
* UserService 是 目标类的接口
* login() 就是要被代理的方法
*/
public interface UserService {
boolean login(String userName, String password);
}
复制代码
注意,要代理的方法,必须从接口中实现ide
/**
* UserServiceImpl 是目标类,或者叫被代理的类
* login() 就是要被代理的方法
*/
public class UserServiceImpl implements UserService {
@Override
public boolean login(String userName, String password) {
System.out.println("校验帐号");
return false;
}
}
复制代码
注意,要代理的方法,必须从接口中实现测试
/**
* UserServiceProxy 是代理类,它继承了 UserService 接口,实现了login()方法
*/
public class UserServiceProxy implements UserService {
/**
* 其实就是写一个新方法把 目标方法包起来
*/
@Override
public boolean login(String userName, String password) {
before();
UserService userServiceImpl = new UserServiceImpl();
Object result = userServiceImpl.login(userName, password);
after();
return result;
}
private void before() {
System.out.println("调用目标方法以前输出的log");
}
private void after() {
System.out.println("调用目标方法以后输出的log");
}
}
复制代码
上面三个类构成了jdk动态代理的最小组成单位,接下来,编写测试类使用jdk动态代理ui
public static void main(String[] args) {
// 建立代理对象
UserService userServiceProxy = new UserServiceProxy();
// 调用代理方法
userServiceProxy.login("wqlm", "123");
}
复制代码
静态代理设计到三个类spa
代理类经过实现目标类的接口,使之与目标类 类型一致。而后在代理方法中调用目标方法,并在调用先后作一些操做。设计
优势代理
缺点code