springboot aop
SpringBoot⾃定义切⾯只在controller⽣效的问题
前⼏天在⼀个SpringBoot项⽬中,封装⼀个基于注解的切⾯功能,在测试过程中,发现这个切⾯逻辑在Service层使⽤,⽆论如何都进⼊不了其中的业务逻辑,但是在Controller层是正常使⽤。在⼏番确认Aop配置⽆误的情况下,通过各种查资料,最后到了解决⽅法。
这个项⽬的权限框架采⽤Shiro,在⾃定义实现AuthorizingRealm的UserRelam类中,给注⼊的Sevice类加上 @Lazy注解后,⾃定义切⾯在Service层也正常使⽤了。
@Component
public class UserRealm extends AuthorizingRealm {
@Lazy
@Resource
private SysUserService sysUserService;
...
}
原因是,spring默认注⼊顺序先执⾏@Configuration,在配置类ShiroConfig⾥⾯进⾏注⼊UserRelam,启动初期,Sping完成了没有被代理对象的Service实例注⼊。⽽@Lazy注解⽤于bean的延迟加载,在@Component组件或其@Bean初始化⽅法上使⽤,来创建⼀个所有受影响的依赖项的延迟解析代理,从⽽确保动态代理完成了再执⾏依赖注⼊。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。