1.先导103
物联网使软件组件松耦合。AOP允许您捕捉系统中常用的功能,并将其转化为组件。
AOP(AspectOrientedProgramming):面向切面编程,面向方面编程。(AOP是一种编程技术)
AOP是OOP的补充延伸。
AOP底层采用动态代理实现。
SpringAOP使用的动态代理是:JDK动态代理+CGLIB动态代理技术。Spring在这两个动态代理中灵活切换。如果是代理接口,默认会使用JDK动态代理。如果要代理某个类别,这个类别不实现接口,就会切换CGLIB。当然,你也可以通过一些配置强制Spring只使用CGLIB。
2.AOP介绍103一般来说,系统中会有一些系统服务,如日志、事务管理、安全等。这些系统服务被称为:交叉业务
这些交叉业务无论是转账银行账户还是删除用户数据,几乎都是通用的。日志、事务管理、安全等都需要做。
若在每个业务处理过程中,都掺杂了这些交叉业务代码,则存在两个问题:
●第一:交叉业务代码在多个业务流程中反复出现。显然,交叉业务代码尚未重复使用。如果修改这些交叉业务代码,则需要修改许多地方。
●二是程序员不能专注于核心业务代码的编写,在编写核心业务代码时需要处理这些交叉业务。
使用AOP可以很容易地解决上述问题。
请参见下图,可以帮助您快速理解AOP的想法:
用一句话总结AOP:独立提取与核心业务无关的代码,形成独立组件,然后水平交叉应用于业务流程的过程称为AOP。
AOP的优点:
●一是代码复用性增强。
●二是代码易于维护。
●三是让开发者更加注重业务逻辑。
3.AOP的七个术语104public class UserService{ public void do1(){ System.out.println("do 1"); } public void do2(){ System.out.println("do 2"); } public void do3(){ System.out.println("do 3"); } public void do4(){ System.out.println("do 4"); } public void do5(){ System.out.println("do 5"); } // 核心业务方法 public void service(){ do1(); do2(); do3(); do5(); }}
3.1连接点Joinpointointtinttt连接点描述位置
○在程序的整个执行过程中,可以织入切面的位置。方法执行前后,异常抛出后等位置。
3.2切点Pointcutcut切点本质上是一种方法(真正编织切面的方法称为切点)
○在程序执行过程中,真正织入切割方法。(一个切点对应多个连接点)
3.3.3通知Advicece○通知,也被称为增强,是你想编织的代码。
○通知包括:
■前置通知
■后置通知
■环绕通知
■异常通知
■最终通知
3.4切面Aspecttect○切点+通知是切面。
3.5编织Weaving○将通知应用到目标对象上的过程。
3.6代理对象Proxyyy○将目标对象编织成通知后产生的新对象。
3.7目标对象Targetttet○被编织成通知的对象。
通过下图,您可以很好地理解AOP的相关术语:
4.切点表达式105切点表达式用于定义通知(Advice)切入哪些方法?
切入点表达式语法格式:
execution([访问控制权限修饰符] 返回值类型 方法名(形式参数列表)[全限定类名] [异常])
4.1访问控制权限修饰符:●可选项。
●不写,就是包括四个权限。
●写public意味着只包括公开方法。
4.2返回值类型:●必填项。
●*任意类型的返回值表示。
4.3全限定类名:●可选项。
●两个点..代表当前包和子包下的所有类别。
●省略时表示所有类别。
4.4方法名:●必填项。
●*表示所有方法。
●set*表示所有的set方法。
4.5形式参数列表:●必填项
●()表示没有参数的方法
●(..)参数类型和随机数量的方法
●(*)只有一个参数的方法
●(*,String)第一个参数类型是随机的,第二个参数是String。
4.6异常:●可选项。
●省略时表示任何异常类型。
了解以下切点表达式:
execution(public * com.powernode.mall.service.*.delete*(..))
execution(* com.powernode.mall..*(..))
execution(* *(..))