ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean

2021-09-02 13:04:03  阅读:216  来源: 互联网

标签:容器 CTW SpringBoot AspectJ Bean SpringIOC public


SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean

在SpringBoot中开发AspectJ时,使用CTW的方式来织入代码,由于采用这种形式,切面Bean不在SpringIOC容器中,相关的代码在编译时就已经织入目标代码中,而SpringIOC中的Bean在运行期才会被注入。
切面:

    @Autowired
    public LoginService loginService;

    @Pointcut("execution(* com.zakary.qingblog.controller.LoginController.userLogin(..))")
    public void loginAuthority() { }

    @Before("loginAuthority()")
    public void loginAuthority(JoinPoint point) throws Throwable{
        Object[] objArgs = point.getArgs();
        String mail= AnalysisUtils.getObjectToMap(objArgs[0]).get("userMail").toString();
        User user=loginService.getUserInfo(mail);
        int userState=user.getUserState();
        if(userState==3){
            throw new BusinessException("此账户已被注销!");
        }
    }

此时在运行时会发报错,loginService为null,不能通过@Autowired注入
解决:
添加一个配置类

@Configuration
@ComponentScan("com.zakary.qingblog.controller")
public class CustomConfig{

    @Bean
    public AuthorityAspect authorityAspect(){
        AuthorityAspect authorityAspect= Aspects.aspectOf(AuthorityAspect.class);
        return authorityAspect;
    }

}

@ComponentScan 的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中.
通过@Bean下的方法就可以在切面中注入Spring容器中的Bean了。
可能遇到得问题:
org.aspectj.lang.NoAspectBoundException: Exception while initializing
Bean初始化出错,并提示AspectOf方法缺失
解决方法
(1)因为使用CTW方式,所以需要使用ajc编译器来编译整个项目
Setting->Java Complier->Complier->Ajc
(2)如还存在以上问题,ReBuild项目即可
参考地址1
参考地址2
参考地址3

标签:容器,CTW,SpringBoot,AspectJ,Bean,SpringIOC,public
来源: https://www.cnblogs.com/zakary/p/15218229.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有