spring中面向千面的开发有两种方式,一是xml配置方式,二是基于注解的方式。但是这两种虽然在写法不一样,但是最终的目的都是为了要表达一个切点和这个切面的表达式要干什么。
实际开发中推荐使用基于注解方式的切面配置。
主要注解:
@Aspect:作用在类上,用来标记这个类是一个切面配置类,这个类中由两个不分组成的,一个事由@PointCut注解和@Advice注解来组成。
@PointCut:主要是由pointCut expression表达式来组成的,表名了哪些类的哪些方法来植入你的代码
@Advice:主要说明了在切入点执行的什么时机来植入的,比如执行前,执行后。
AOP术语:
- 通知、增强处理(Advice)
就是你想要新增的功能,也就是上说的安全、事物、日志等。你给先定义好,然后再想用的地方用一下。包含Aspect的一段处理代码 - 连接点(JoinPoint)
这个就更好解释了,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的钱、后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点。其他如AspectJ还可以让你在构造器或属性注入时都行,不过那不是咱们关注的,只要记住,和方法有关的前前后后都是连接点。 - 切入点(Pointcut)
上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有十几个连接点了对吧,但是你并不想在所有方法附件都使用通知,你只是想让其中几个或者达到某一种条件后再使用增强通知,在调用这几个方法之前、之后或者抛出异常时干点什么,那么就用切入点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。 - 切面(Aspect)
切面是通知和切入点的结合。现在发现了吧,没连接点什么事,链接点就是为了让你好理解切点搞出来的,明白这个概念就行了。一:通知说明了干什么和什么时候干(什么时候通过方法名中的befor,after,around等就能知道),二:切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
Aspect=PointCut+advice
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。