静态代理,代理类是在程序运行之前就定义好的
定义业务接口,简单的转账业务
1
2
3
4
5
6
7public interface IAccountService {
//主业务逻辑,转账
void transfer();
}
定义目标类,该类实现业务接口,并实现接口定义的目标方法(只实现主业务逻辑转账)
1
2
3
4
5
6
7
8
9
10
11
12
13public class AccountServiceImpl implements IAccountService {
//目标方法
public void transfer() {
System.out.println("完成转账功能");
}
}
定义代理类,该类实现业务接口。并且将接口对象作为一个成员变量,还要定义一个带参数(接口对象)的构造器,因为要将目标对象引入代理类,以便代理类调用目标类的目标方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public class AccountProxy implements IAccountService {
//声明业务接口对象
private IAccountService target;
public AccountProxy() {
}
// 业务接口对象作为构造器参数
public AccountProxy(IAccountService target) {
this.target = target;
}
/**
* 代理方法,实现对目标方法的功能增强
*/
public void transfer() {
//对目标方法的增强
System.out.println("对转账人身份进行了验证!!");
target.transfer();
}
}定义客户类实现使用代理类转账。
1
2
3
4
5
6
7
8
9
101. public class Client {
public static void main(String[] args) {
//创建目标对象
IAccountService target = new AccountServiceImpl();
//创建代理对象
IAccountService proxy = new AccountProxy(target);
//执行增强过的业务
proxy.transfer();
}
}