SpringBoot AOP导致service注入后是null
1.由于业务需求需要
纪委派户操作日记爱你我就色色你,无疑需要使用到SpringAOP。
2.先引入SpringBoot的AOP maven 依赖
3.斥逐这个日记操作不错有好多种设施
比如写抑止器,好像基于注解式样,在好像在原本写好的代码中添加也行,然而终末的一种无疑会浑浊原本的代码,同期会对原本的逻辑有一定浑浊,而当今的业务场景,总共的逻辑代码皆照旧编写完成,自测完成,况且查询接口的数目较着大于(增点窜),况且用户的操作日记咱们最护理的无疑是对数据的操作。是以选拔基于注解的式样斥逐。 和学生的爸爸在他家做爱
4.注解编写
上代码
5.底下需要对SpringBoot AOP 中一些注解
了解一下
@Aspect:形色一个切面类,界说切面类的时候需要打上这个注解
@Configuration:spring-boot竖立类
@Pointcut:声明一个切入点,切入点决定了畅通点关注的内容,使得咱们不错限度见告什么时候执行。Spring AOP只支持Spring bean的设施执行畅通点。是以你不错把切入点看作念是Spring bean上设施执行的匹配。一个切入点声明有两个部分:一个包含名字和任性参数的签名,还有一个切入点抒发式,该抒发式决定了咱们关注阿谁设施的执行。
注:动作切入点签名的设施必须复返void 类型
Spring AOP支持在切入点抒发式中使用如下的切入点带领符:
execution - 匹配设施执行的畅通点,这是你将会用到的Spring的最主要的切入点带领符。
within - 斥逐匹配特定类型的畅通点(在使用Spring AOP的时候,在匹配的类型中界说的设施的执行)。
this - 斥逐匹配特定的畅通点(使用Spring AOP的时候设施的执行),其中bean reference(Spring AOP 代理)是指定类型的实例。
target - 斥逐匹配特定的畅通点(使用Spring AOP的时候设施的执行),其中主见对象(被代理的垄断对象)是指定类型的实例。
args - 斥逐匹配特定的畅通点(使用Spring AOP的时候设施的执行),其中参数是指定类型的实例。
@target - 斥逐匹配特定的畅通点(使用Spring AOP的时候设施的执行),其中正执行对象的类握有指定类型的注解。
@args - 斥逐匹配特定的畅通点(使用Spring AOP的时候设施的执行),其中本色传入参数的出手时类型握有指定类型的注解。
@within - 斥逐匹配特定的畅通点,其中畅通点地点类型已指定注解(在使用Spring AOP的时候,所执行的设施地点类型已指定注解)。
@annotation - 斥逐匹配特定的畅通点(使用Spring AOP的时候设施的执行),其中畅通点的主题握有指定的注解。
其中execution使用最时时,即某设施执行时进行切入。界说切入点中有一个病笃的常识,即切入点抒发式,西西掰阴艺术咱们一会在确认怎么写切入点抒发式。
切入点意思意思等于在什么时候切入什么设施,界说一个切入点就十分于界说了一个“变量”,具体什么技巧使用这个变量就需要一个见告。
行将切面与主见对象畅通起来。
如例子中所示,见告均不错通过注解进行界说,注解中的参数为切入点。
spring aop支持的见告:
@Before:前置见告:在某畅通点之前执行的见告,但这个见告不可退却畅通点之前的执行过程(除非它抛出一个特地)。
@AfterReturning :后置见告:在某畅通点时常完成后执行的见告,芜俚在一个匹配的设施复返的时候执行。
6.了解完以上模样
需要作念的是纪委派户时常央求,以及特地央求需要纪录的信息,对应一下实体操作
7.用户时常央求
在用户时常央求头部加上自界说的注解
8.在AOP中抑止投入该设施的前置操作以及特地操作
9.说一下踩的一个坑
当本日记照旧不错时常使命了,然而业务代码却失效了,service注入的时候是空的(部分代码),
一顿百度以后发现,原本AOP只可对public 和provide 奏效,如若你的设施法例是private,那么service注入就为空,在springboot 中默许使用的是cglib来代理操作对象,领先,特地设施是不会出当今代理类中,这也等于为什么代理对象无法对private操作的根柢原因
jdk是代理接口,特地设施势必不会存在在接口里,是以就不会被抑止到;
cglib是子类,private的设施照样不会出当今子类里,也不可被抑止。
10.措置的根柢倡导
不是强制使用cglib来代理,而是要将你的controller中的设施不开采特地属性,以上只是代表个东说念主不雅点哟。
追想
以上为个东说念主教悔爱你我就色色你,但愿能给公共一个参考,也但愿公共多多支持剧本之家。
您可能感兴味的著作:
springboot 如何措置static调用service为null
SpringBoot中@Autowired 失效及@Autowired 注入为null的措置
SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解进行参数校验
Springboot摄取前端的Json然而为null问题
Springboot Filter中注入bean无效为null问题
Springboot编写CRUD时打听对应数据函数复返null的问题及措置设施
|