Spring与AOP
1) AOP:Aspect Orient Programming; 面向切面的编程,解决的“系统级服务”和“主业务逻辑”间的耦合度问题
2) AOP是一种思想,一种解决方案,一套规范,其实现方式有很多,最著名有Spring、AspectJ。
3) AspectJ是另外一个框架,与Spring没有任何关系,但是都是AOP实现者,在AspectJ下具有两种AOP实现:基于XML的实现,基于注解的实现。
4) AspectJ实现导入jar包:
1>AspectJ的jar包
2>Spring用于整合AspectJ的jar包
3>Spring-aop的jar包
4>aop联盟给出的aop规范的jar包
5) 切面:就是交叉业务逻辑,也就是要对主业务进行增强的部分:通知、顾问
织入:将切面的切入到主业务逻辑中的过程,称为织入。
连接点:可以被增强的目标方法,称为连接点
切入点:真正被增强的连接点方法,指定的织入位置。
通知:是一种切面,可以完成简单的织入功能。指定织入时间。
6) 切入点表达式:
execution(访问权限 返回类型 全限定性方法名(参数列表)抛出的异常)
其中返回类型与方法名是不能省略的
1>execution(* .SomeServiceImpl.(…))
表示的意义是:指定所有包下(只能是一级包)的SomeServiceImpl中的所有方法。无论是否有参数,无论有几个参数,无论返回类型是什么,都要被增强的切入点方法。
2>execution(void .SomeServiceImpl.(…))
表示的意义是:指定所有包下(只能是一级包)的SomeServiceImpl中的所有返回类型为void的方法都要被增强。
3>execution(* …SomeServiceImpl.(…))
表示意义:指定所有包下(可以是多级包)的SomeServiceImpl类中的所有方法,无论是否有参数,有几个参数,放回类型是什么都是要被增强的切入点方法。
7) 基于XML的AspectJ编程:
1.导入jar包:
1>AspectJ的jar包
2>Spring用于整合AspectJ的jar包
3>Spring-aop的jar包
4>aop联盟给出的aop规范的jar包
2.定义切面类
3.引入aop约束
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
4.AOP配置 : aop:config</aop:config>
8) 基于注解的AspectJ编程
1.导入jar包(同上)
2.定义切面类
3.引入AOP约束(同上)
4.注册AspectJ自动代理生成器
aop:aspectj-autoproxy/
5.切面类中添加注解