对某个类型中的方法进行拦截,然后加入固定的业务逻辑,这是AOP面向切面编程可以做的事,在springboot里实现AOP的方法也有很多,<代码> spring-boot-starter-aop> 代码或者<代码> aspectjweaver> 代码都是可以实现的,不过我们在实现之前,先来看一下AOP里的几个概念。
-
<李>切面(方面):是指横切多个对象的关注点的一个模块化,事务管理就是J2EE应用中横切关注点的很好示例。在Spring AOP中,切面通过常规类(基本模式方法)或者通过使用了注解@Aspect的常规类来实现。李>
<李>连接点(联合):是指在程序执行期间的一个点,比如某个方法的执行或者是某个异常的处理,在Spring AOP中,一个连接点往往代表的是一个方法执行。李>
<李>通知(建议):是指切面在某个特殊连接点上执行的动作。通知有不同类型,包括“左右”,“之前”和“之后”通知。许多AOP框架包括春天,将通知建模成一个拦截器,并且围绕连接点维持一个拦截器链。李>
<李>切入点(切入点):是指匹配连接点的一个断言。通知是和一个切入点表达式关联的,并且在任何被切入点匹配的连接点上运行(举例,使用特定的名字执行某个方法).AOP的核心就是切入点表达式匹配连接点的思想.Spring默认使用AspectJ切入点表达式语李>
<李>引入(简介):代表了对一个类型额外的方法或者属性的声明.Spring AOP允许引入新接口到任何被通知对象(以及一个对应实现)。比如,可以使用一个引入去使一个bean实现IsModified接口,从而简化缓存机制。(在AspectJ社区中,一个引入也称为一个类型间声明类型间声明)李>
<李>目标对象(目标对象):是指被一个或多个切面通知的那个对象。也指被通知对象(“建议对象”),由于Spring AOP是通过运行时代理事项的,这个目标对象往往是一个代理对象。李>
<李> AOP代理(AOP代理):是指通过AOP框架创建的对象,用来实现切面合约的(执行通知方法等等)。在春天框架中,一个AOP代理是一个JDK动态代理或者是一个CGLIB代理。李>
<李>织入(编织):将切面和其他应用类型或者对象连接起来,创骗一个被通知对象。这些可以在编译时(如使用AspectJ编译器),加载时或者运行时完成.Spring AOP,比如其他纯Java AOP框架一般是在运行时完成织入。李>
1引用依赖包
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-aop & lt;/dependency>
2添加切面和拦截的行为
@Aspect @ component @Slf4j 公开课TestAspect {/* * *对TestService类下面的所有方法拦截。 */@Pointcut(“执行”(* com.lind.start.test.aop.TestService。* (. .))) 公共空间切入点(){ }//前置通知 @Before(“切入点()”) 公共空beforeMethod(连接点的连接点){ 如果(joinPoint.getArgs ()。长度==1,,joinPoint.getArgs () [0] instanceof用户){ 用户用户=(用户)joinPoint.getArgs () [0]; aop user.setUsername(“赋值”); log.info(“调用了前置通知”+ user.toString ()); } }//@After:后置通知 @After(“切入点()”) 公共空afterMethod(连接点的连接点){ log.info(“调用了后置通知”); }//@AfterRunning:返回通知结果为返回内容 @AfterReturning(值=" https://www.yisu.com/zixun/pointcut (),返回=敖峁? 公共空间afterReturningMethod(连接点的连接点,对象的结果){ log.info(“调用了返回通知”); }//@Around:环绕通知 @Around(“切入点()”) 公共对象周围(ProceedingJoinPoint pjp)抛出Throwable { 周围log.info(“执行方法之前”); 对象对象=pjp.proceed (); 周围log.info(“执行方法之后,返回值:”+对象); 返回对象; } }
3调用及结果
@SpringBootTest @RunWith (SpringRunner.class) 公开课AopTest { @ autowired TestService TestService; @Test 公共空白测试(){ testService。打印(新用户()); } }
到此这篇关于springboot使用自定义的方面的示例代码的文章就介绍到这了,更多相关springboot自定义方面的内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!