前言
面试的时候,被问的最多的可能就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了。
1、到底是什么是AOP?
所谓AOP也就是面向切面编程,能够让我们在不影响原有业务功能的前提下,横切扩展新的功能。这里面有一个比较显眼的词我们需要注意一下,横切,它是基于横切面对程序进行扩展的。
2、AOP相关术语
在Spring的AOP中有很多的术语,而且容易混淆,大家一定要先搞清楚这几个概念:
连接点(Joinpoint):在程序执行过程中某个特定的点,比如类初始化前、类初始化后,方法调用前,方法调用后;
切点(Pointcut):所谓切点就是你所切取的类中的方法,比如你横切的这个类中有两个方法,那么这两个方法都是连接点,对这两个方法的定位就称之为切点;
增强(Advice):增强是织入到连接点上的一段程序,另外它还拥有连接点的相关信息;
目标对象(Target):增强逻辑的织入目标类,就是我的增强逻辑植入到什么位置;
引介(Introduction):一种特殊的增强,它可以为类添加一些属性喝方法;
织入(Weaving):织入就是讲增强逻辑添加到目标对象的过程;
代理(Proxy):一个类被AOP织入增强后,就会产生一个结果类,他是融合了原类和增强逻辑的代理类;
切面(Aspect):切面由切点和增强组成,他是横切逻辑定义和连接点定义的组成;
3、AOP功能实践
我们这里主要是学习SpringBoot中的一些功能,所以我们这里用的是SpringBoot工程,版本也是最新的2.0.5版本。
创建SpringBoot工程就不说了,我们直接引入Maven的依赖:
首先我们来创建一个Controller类:
创建切面:
注解概述:
@Apsect:将当前类标识为一个切面;
@Pointcut:定义切点,这里使用的是条件表达式;
@Before:前置增强,就是在目标方法执行之前执行;
@AfterReturning:后置增强,方法退出时执行;
@AfterThrowing:有异常时该方法执行;
@After:最终增强,无论什么情况都会执行;
@Afround:环绕增强;
测试:
异常测试:
4、定义自定义注解
应用场景:在我之前上个项目的时候,有这样一个注解,就是在访问其他接口的时候必须要登录,那么这个时候我们就定义一个注解,让它去对用户是否登录进行校验,那么基于这样的一个场景,我们来定义一个校验登录的注解。
创建一个注解:
创建一个AOP切面:
测试未登录:
测试登录:
这样我们就可以简单的实现了一个登录校验的注解。
通过今天的分享你会使用AOP和自定义注解了吗?
欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!