切面的执行时间,这个执行时间在规范中叫做Advice(通知,增强)

在aspectJ框架中使用注解表示的。

AspectJ的切入点表达式(掌握)

  1. execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

解释

  1. modifiers-pattern : 访问权限类型
  2. ret-type-pattern : 返回值类型
  3. declaring-type-pattern: 包名
  4. name-pattern(param-pattern): 方法名(参数类型和参数个数)
  5. throws-pattern: 抛出异常类型
  6. ? : 表示可选的部分

以上表达式共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的功能增强。