AOP当中的概念:
- 1、切入点(Pointcut):在哪些类,哪些方法上切入(where);
- 2、增强(Advice): 早期翻译为通知,在方法执行的什么时机(when:方法前/方法后/方法前后)做什么(what:增强的功能);
- 3、切面(Aspect): 切面=切入点+增强,通俗点就是:在什么时机,什么地点,做什么增强!
- 4、织入(Weaving): 把切面加入到对象,并创建出代理对象的过程。(该过程由Spring来完成)。
开启AOP
SpringMvc 开启方式
-
1、引入依赖
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.7</version> </dependency> -
2、在spring配置文件中加入
<!--AOP注解解析器-->
SpringBoot 开启方式
-
1、引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> -
2、在application.properties中加入配置
spring.aop.auto=true
SpringBoot 简单实践
1、切面
1@Component//让spring管理该bean 2@Aspect//切面 3public class AOPTest { 4 /* 5 *切点 6 */ 7 @Pointcut("execution(* com.kismet.p2p.mgrsite.controller.AOPController.test(..))") 8 public void aop(){} 9 10 @Around("aop()")//增强以around增强为例 11 public Object around(ProceedingJoinPoint point){ 12 Object result = null; 13 try { 14 System.out.println("AOP开始了"); 15 /* 16 * 执行被切点中的方法 17 * result接受到的方法放回值,该例子中即为"lalaalal" 18 */ 19 result = point.proceed(); 20 System.out.println("AOP结束了"); 21 } catch (Throwable throwable) { 22 throwable.printStackTrace(); 23 } 24 return result; 25 } 26}
说明:
- 1、execution(<修饰符>? <返回类型> <声明类型>? <方法名>(<参数>) <异常>?) ?表示可选参数
- 2、支持*匹配规则
- 3、其中带问号的为选填.例如上述切点表达式的意思为:
(* com.kismet.p2p.mgrsite.controller.AOPController.test(..)) 方法com.kismet.p2p.mgrsite.controller.AOPController.test方法的所有返回类型,所有参数类型,作为切点.
2、被切点
1package com.kismet.p2p.mgrsite.controller; 2@Controller 3public class AOPController { 4 @RequestMapping("test") 5 public String test(){//该方法的引用即为上述切面中的切点 6 System.out.println("被测试"); 7 return "lalaalal"; 8 } 9}
3、运行方法test结果
AOP开始了
被测试
lalaalal
AOP结束了