SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean
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的更多相关文章
- Servlet自动注入Spring容器中的Bean解决方法
很多情况在进行Web开发的时候需要自己手写Servlet来完成某些功能,而servlet有需要注入Spring容器中的某些bean,这是每次都要手动获取比较麻烦,这里有一个解决方案,只需要写一个ser ...
- JSP页面中如何注入Spring容器中的bean
第一步在JSP页面中导入下面的包: <%@page import="org.springframework.web.context.support.WebApplicationCont ...
- Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)
在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...
- SpringBoot 之 普通类获取Spring容器中的bean
[十]SpringBoot 之 普通类获取Spring容器中的bean 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器 ...
- spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property
spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property
- [十]SpringBoot 之 普通类获取Spring容器中的bean
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...
- SpringBoot之普通类获取Spring容器中的bean
package com.geostar.geostack.git_branch_manager.common; import org.springframework.beans.BeansExcept ...
- SpringBoot | 1.2 全注解下的Spring IoC
前言 在学习SpringBoot之前,有几个Spring的重要的基础概念需要提一下,SpringBoot对这些基础概念做进一步的封装,完成自动配置.首先就是Spring的控制反转IOC,由于Sprin ...
- 四、spring成长之路——springIOC容器(下)
目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...
随机推荐
- JAVAWEB开发批量删除,SSM的几种情况
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一个基于activiti审批流程示例,如何与系统整合
前言 目前市场上有很多开源平台没有整合工作流,即使有,也是价格不菲的商业版,来看这篇文章的估计也了解了行情,肯定不便宜.我这个快速开发平台在系统基础功能(用户管理,部门管理-)上整合了工作流,你可以直 ...
- MySQL-存储引擎-MERGE
MERGE存储引擎是一组Myisam表的组合,这些Myisam表必须结构完全相同,MERGE表本身并没有数据,对MERGE类型的表可以进行查询.更新.删除操作,这些操作实际上是对内部的Myisam表进 ...
- 谷歌api 二维码生成 实例
谷歌提供的二维码生成器接口,非常实用!分享给大家 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- Python中的文件处理和数据存储json
前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...
- introduction-to-64-bit-assembly
introduction-to-64-bit-assembly NASM - The Netwide Assembler x86-64 下函数调用及栈帧原理 汇编语言基本概念简介 mycode
- Django图片上传和前端展示
1 - 模型 class Book(models.Model): #定义图书模型 book_name = models.CharField(max_length=100,verbose_name='书 ...
- npm配置镜像及nrm使用
淘宝npm镜像 搜索地址:http://npm.taobao.org/ registry地址:http://registry.npm.taobao.org/ cnpmjs镜像 搜索地址:http: ...
- 第23篇-虚拟机对象操作指令之getstatic
Java虚拟机规范中定义的对象操作相关的字节码指令如下表所示. 0xb2 getstatic 获取指定类的静态域,并将其值压入栈顶 0xb3 putstatic 为指定的类的静态域赋值 0xb4 ge ...
- weblogic漏洞分析之CVE-2017-10271
weblogic漏洞分析之CVE-2017-10271 一.环境搭建 1)配置docker 这里使用vulhub的环境:CVE-2017-10271 编辑docker-compose.yml文件,加入 ...