原本在看springboot的我,看到有一章是讲到AOP的,我便对此产生了兴趣,为了防止自己忘记,便决定记录下来,以便日后重复翻阅。在这顺便分享一份我看的SpringBoot的笔记吧,个人觉得很不错好理解
转载自:https://blog.csdn.net/qq_33257527/article/details/79515163
1、AOP:Aspect Oriented Programming(面向切面编程,是Spring框架中一大特性)比较常见的用法是日志和异常处理中。
2、AOP中的注解:
@Aspect:把当前类标识为一个切面供容器读取;
@Pointcut:是植入Advice的触发条件,也可以说切点(具体使用方法下面介绍);
@Around:环绕增强,相当于MethodInterceptor;
@AfterReturning:后置增强,相当于AfterReturningAdvice正常退出方法执行;
@Before:前置增强,相当于BeforeAdvice;
@AfterThrowing:异常抛出增强,相当于ThrowsAdvice;
@After:final,无论异常还是正常退出都执行。
3、下面分析下Pointcut的具体写法:
@Pointcut(execution(修饰符(可选) 返回值类型 类路径名(可选) 方法名(参数) 异常类型)
例子:
第一种
1. execution(* * (...))
表示匹配所有的方法;
2. execution(public * com.example.demo.UserService(...))
表示匹配com.example.demo.UserService下所有公有方法;
3. execution(* com.example.demo.service..*.*(...))
表示匹配com.example.demo.service及其子包下的所有方法。
第二种(自己写注解):
@Target(ElementType.METHOD,ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface demo{
String param() default "";
}
@Pointcut("@annotation(demo)")
public void loginCut(){
//不用写内容
}
@Around("loginCut()")
public ...{
//...
}
4、使用AOP的有点是降低耦合度,我们平时处理异常的是采用如图所示形式:
采用AOP后的异常处理:
从图中可以看出,明显降低耦合度。
今日份到此结束