关于@Component注解下的类无法@Autowired问题
@Component注解下类无法@Autowired
这个问题心累
在把我的一个非Web程序迁移从Spring迁移到SpringBoot时,出现了在@Component注解下@Autowired的类为null的情况,也就是没注入成功,或者说是此类在bean加载之前就被调用了。
试了各种办法,修改扫描包,修改@Component注解等等,皆未成功,后来看到了一个方法,探究了一下。
@Component public class ComponentClass { @Autowired private JedisClient jedisClient; public static ComponentClass componentClass; @PostConstruct public void init(){ componentClass = this; componentClass.jedisClient = this.jedisClient; } }
- 声明一个此类的静态变量,用以保存bean。
- 使用@PostConstruct注解,将需要注入的类添加到静态变量中。
- 接下来,使用这个静态变量来调用注入类就行了。
@PostConstruct这个注解的具体作用就是:
注解在方法上,表示此方法是在Spring实例化该bean之后马上执行此方法,之后才会去实例化其他bean。
这样在Spring实例化ComponentClass之后,马上执行此方法,初始化ComponentClass静态对象和成员变量jedisClient。
@Component注解下@Autowired报错
这是由于 Springboot Bean 的加载机制所导致的,具体大家可以去研究源码。
下面是我的解决方案
仅供参考
@Component public class XxxConfig { // 1 public static XxxConfig xxxConfig ; @Resource private RedisUtil redisUtil; // 2 @PostConstruct public void init() { xxxConfig = this; xxxConfig.redisUtil = this.redisUtil; } public boolean test() { // 3.使用 jwtConfig.redisUtil 形式调用 return xxxConfig.redisUtil.set("abcd", "123456", 3600); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringMVC中Invalid bound statement (not f
本文主要介绍了SpringMVC中Invalid bound statement (not found)常见报错问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-05-05Spring中的@ConditionalOnProperty作用和用法详解
这篇文章主要介绍了Spring中的@ConditionalOnProperty作用和用法详解,在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效,需要的朋友可以参考下2023-11-11分享Spring Cloud OpenFeign 的五个优化技巧
这篇文章主要分享的是Spring Cloud OpenFeign 的五个优化技巧,OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件,更多相关内容需要的小伙伴可以参考一下2022-05-05
最新评论