AOP的核心实现机制
通过代理,控制对对象的访问!核心业务自己做,其他统一的流程代码交给代理类处理!
就是通过proxy持有realObject的引用,并进行一层封装。
静态代理:
应用场景:
1.安全代理:屏蔽对真是角色的直接访问
2.远程加载:通过代理类处理远程方法调用
3.延迟加载:现价在轻量级的代理对象,真正需要时再加载真实对象。(比如要开发一个大文档查看软件,大文档中有大图片,在打开文件时不可能将所有的图片都显示出来,此时使用代理模式,当需要查看图片时,再用Proxy进行大图片的打开。)
背景:客户邀请某巨星在**典礼上表演一段!!!!!
public interface Superstar {
/**
* 表演
*/
void perform();
}
/**
* 真正的巨星类,会表演
*/
public class Authentic implements Superstar {
@Override
public void perform() {
System.out.println("Authentic perform");
}
}
/**
* 巨星的经纪人陪同巨星一起去表演
* 他的表演不是真正的表演而是
* 在巨星表演之前,签合同
* 看巨星表演
* 在巨星表演之后,结算出场费
*/
public class Proxy implements Superstar{
Superstar superstar;
public Proxy(Superstar superstar) {
this.superstar = superstar;
}
@Override
public void perform() {
System.out.println("帮助巨星签合同");
superstar.perform();
System.out.println("帮助巨星结算演出费");
}
}
/**
* 客户邀请某巨星出席
* 只需要联系他的经纪人
*/
public class Client {
public static void main(String[] args) {
Superstar authentic = new Authentic();
Superstar proxy = new Proxy(authentic);
proxy.perform();
}
}
好处就是!!!
扩展原功能,不用修改原来的代码!
局限性:一个经纪人手下有多个明星。如果此时仍使用静态代理,可以通过以下方法实现功能。
1.一个明星用一个proxy ,创建多个代理类 -------------------------------------导致proxy膨胀
2.通过创建一个proxy,持有不同的真实角色,同时实现Action1、Action2、Action3接口---------------------------一个类依赖太多接口
-
-
-
-
-
-
----------------------------下一章------用动态代理来解决!!!!