切面的执行时间,这个执行时间在规范中叫做Advice(通知,增强)
在aspectJ框架中使用注解表示的。
AspectJ的切入点表达式(掌握)
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
解释
modifiers-pattern : 访问权限类型ret-type-pattern : 返回值类型declaring-type-pattern: 包名name-pattern(param-pattern): 方法名(参数类型和参数个数)throws-pattern: 抛出异常类型? : 表示可选的部分
以上表达式共4个部分:
execution(访问权限 方法返回值 方法声明(参数) 异常类型)
| 符号 | 意义 |
|---|---|
| * | 0至多个任意字符 |
| - | 用在方法参数中,表示任意多个参数;用在包名后,表示当前包及其子包中路径 |
| + | 用在类名后,表示当前类及其子类;用在接口后,表示当前接口及其实现类 |
举例:
execution(public * *(...))
指定切入点为: 任意功能方法
execution(* set*(...))
指定切入点为: 任何一个以"set"开始的方法。
前置通知创建Maven项目
新建maven
File -> new -> project -> Maven -> Create from archetype -> maven-archetype-quickstart -> 包名,项目名,项目存放路径 -> finish
加入依赖
- spring依赖
- aspectJ依赖
- junit单元测试
创建目标类
接口和他的实现类
要做的是给类中的方法增加功能
创建切面类: 普通类
- 在类的上面加入
@Aspect - 在类找去定义方法,这个方法就是切面要执行的功能代码
- 在方法的上面要加入
aspect中的通知注解,例如@Before - 有需要指定切入点表达式
execution()
- 在方法的上面要加入
创建spring的配置文件:声明对象,把对象交给容器统一管理
声明对象可以使用**注解**或xml配置文件**<bean>**
- 声明目标对象
- 声明切面类对象
- 声明aspectJ框架中的自动代理生成器标签。
- 自动代理生成器: 用来完成代理对象的自动创建功能的
创建测试类,从spring容器中获取目标对象(实际就是代理对象)
通过代理执行方法,实现aop的功能增强。
