静态代理是指,代理类在程序运行前就已经定义好,其与目标类的关系在程序运行前就已经确立。
下面直接给出案例:
定义业务接口
package com.demo;
public interface IAccountService {
public void transfer(); //主业务逻辑:转账
}
定义目标类
package com.demo;
public class AccountServiceImpl implements IAccountService {
@Override
public void transfer() { //目标方法
System.out.println("调用Dao层,完成转账主业务");
}
}
定义代理类
package com.demo;
public class AccountServiceImplProxy implements IAccountService{
private IAccountService target; //声明业务接口对象
public AccountServiceImplProxy() {
}
public AccountServiceImplProxy(IAccountService target) { //业务接口对象作为构造器参数,用于接收目标对象
this.target = target;
}
@Override
public void transfer() { //代理方法,实现对目标方法功能的增强
System.out.println("对转账人身份进行验证");
target.transfer();
}
}
测试代码:
package com.demo;
public class Client {
public static void main(String[] args) {
IAccountService target = new AccountServiceImpl(); //目标对象
IAccountService proxy = new AccountServiceImplProxy(target); //代理对象
proxy.transfer();
}
}