Spring的AOP静态代理
静态代理
由程序创建或特定工具自动生成源代码,程序在运行之前已经存在代理类class文件
通过讲目标类与代理类实现同一个接口,让代理类持有真实类对象,然后在代理类方法中调用真实类方法,在调用真实类方法的前后添加我们所需要的功能扩展代码来达到增强的目的
优点
代理使客户端不需要知道实现类是什么,怎么做的,而客户端只需知道代理即可
方便增加功能拓展业务
缺点
代理类中出现大量冗余代码,非常不利于扩展和维护
如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码维护的复杂度
实现流程:首先创建支付类接口,实现支付类接口的实现类,创建代理类接口,调用支付类接口的实现类来静态代理增加方法
public interface PayInfoService {
//测试支付接口
void payInfo();
}
public class PayInfoServiceImpl implements PayInfoService{
//实现支付类
//增加业务逻辑
@Override
public void payInfo() {
System.out.println("这里是PayInfo实现方法");
}
}
//创建代理类
public class StaticPayInfoProxy implements PayInfoService{
//增加代理对象
PayInfoService payInfoService;
//创建代理类的时候增加需要被代理的支付接口实现类
public StaticPayInfoProxy(PayInfoService payInfoService){
this.payInfoService = payInfoService;
}
//在代理的方法中增加静态代理的日志
@Override
public void payInfo() {
System.out.println("静态代理开始");
payInfoService.payInfo();
System.out.println("静态代理结束");
}
}
public static void main(String[] args) {
//调用方法
StaticPayInfoProxy staticPayInfoProxy = new StaticPayInfoProxy(new PayInfoServiceImpl());
staticPayInfoProxy.payInfo();
}