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

SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean的更多相关文章

  1. Servlet自动注入Spring容器中的Bean解决方法

    很多情况在进行Web开发的时候需要自己手写Servlet来完成某些功能,而servlet有需要注入Spring容器中的某些bean,这是每次都要手动获取比较麻烦,这里有一个解决方案,只需要写一个ser ...

  2. JSP页面中如何注入Spring容器中的bean

    第一步在JSP页面中导入下面的包: <%@page import="org.springframework.web.context.support.WebApplicationCont ...

  3. Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)

    在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...

  4. SpringBoot 之 普通类获取Spring容器中的bean

    [十]SpringBoot 之 普通类获取Spring容器中的bean   我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器 ...

  5. spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property

    spring  在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property

  6. [十]SpringBoot 之 普通类获取Spring容器中的bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...

  7. SpringBoot之普通类获取Spring容器中的bean

    package com.geostar.geostack.git_branch_manager.common; import org.springframework.beans.BeansExcept ...

  8. SpringBoot | 1.2 全注解下的Spring IoC

    前言 在学习SpringBoot之前,有几个Spring的重要的基础概念需要提一下,SpringBoot对这些基础概念做进一步的封装,完成自动配置.首先就是Spring的控制反转IOC,由于Sprin ...

  9. 四、spring成长之路——springIOC容器(下)

    目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...

随机推荐

  1. Git(GitHub)配合TortoiseGit使用

    1.首先下载安装配置Git 安装请参照 https://www.cnblogs.com/xueweisuoyong/p/11914045.html 配置请参照 https://www.jianshu. ...

  2. spring-data-redis 连接泄漏,我 TM 人傻了

    本系列是 我TM人傻了 系列第四期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...

  3. 项目中经常用到的sass语法汇总

    1.定义变量 使用:$(符号定义变量) 注意:使用时要带有'$'符号,定义变量的方式与PHP相同 $变量:数值; $color_r : red; div{ color:$color_r; } 2.if ...

  4. 【CSS】模仿迅雷主页的按钮

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Appium问题解决方案(3)- java.lang.IllegalStateException: UiAutomation not connected!

    背景 连着手机,运行脚本,一段时间之后就报错了,看了Appium-server,发现报了这样一个错误 如何解决呢? 步骤一 通过 adb devices ,确定设备是否已连接上 步骤二(最终解决方案) ...

  6. openswan中out_sa()函数报文封装思想

    out_sa()函数报文封装思想讲解 1. out_sa前言 我已经在上一篇文章中将in_struct函数的基本原理进行了阐述,而out_struct()的实现基本是相同的,如果能理解in_struc ...

  7. L2TP协议简介

    传送门:L2TP代码实现 1. L2TP 概述 L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是 VPDN(Virtual Private Dial-up Networ ...

  8. VUE005. 在data中使用 / 改变data,或在data中调用method函数

    使用三方UI库时经常会遇到在data中写入方法的场景,如Element-UI的级联选择器(动态加载part)需要在data中写入lazyLoad. 但后端总会给出意想不到的需求: 通过接口调取一串数据 ...

  9. 配置IIS Express 允许外部访问

    修改applicationhost.config 配置允许外部访问 操作步骤: 1. 查看本机IP地址记录IP地址,例如:10.1.20.138 2. 如下图,找到要发布的站点的名称 记录站点的名称, ...

  10. Linux中不用用户可以使用相同的uid

    usermod -u 513 -o  tom 使得用户tom可以使用uid等于513,即使513已经被其他用户使用了