介绍AOP
AOP为(Aspect Oriented Programming)的缩写,意为:
面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP 实现的关键在于 代理模式,AOP 代理主要分为静态代理和动态代理。
静态代理
所谓静态代理,就是 AOP 框架会在编译阶段生成 AOP 代理类,因此也称为编译时增强,
他会在编译阶段将 AspectJ(切面)织入到 Java 字节码中,运行的时候就是增强之后的 AOP 对象。
静态代理角色分析
-
抽象角色 : 一般使用接口或者抽象类来实现
-
真实角色 : 被代理的角色
-
代理角色 : 代理真实角色 ; 代理真实角色后 , 一般用于附属的操作 .
-
客户 : 对代理角色进行操作.
案例一
租房案例分析:
- 实现一个租房的接口,抽象类角色
//租房
public interface Rent {
public void rent();
}
- 创建一个真实代理角色
//真实角色: 房东,房东要出租房子
public class Host implements Rent{
public void rent() {
System.out.println("房屋出租");
}
}
- 代理角色
//代理角色:中介
public class Proxy implements Rent {
//获取房东
private Host host;
//生成有参与无参构造
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
//代理帮房东租房
public void rent(){
//看房
seeHouse();
//房东要出粗房子
host.rent();
//签合同
contract();
//收中介费
fare();
}
//看房
public void seeHouse(){
System.out.println("中介带客户看房");
}
//签租赁合同
public void contract(){
System.out.println("签租赁合同");
}
//收中介费
public void fare(){
System.out.println("收中介费");
}
}
- 客户访问代理角色
//客户去找中介代理
public class Client {
public static void main(String[] args) {
//房东要租房
Host host = new Host();
//代理:中介帮房东租房,代理角色会有一些附属操作
Proxy proxy = new Proxy(host);
//客户去找中介
proxy.rent();
<