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