关于@Component注解下的类无法@Autowired问题

网友投稿 546 2022-08-18


关于@Component注解下的类无法@Autowired问题

目录@Component注解下类无法@Autowired这个问题心累@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之后马上执行此方法,之后才会去实例化其他beahBMXbkn。

这样在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);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一起来学习JAVA的运算符
下一篇:SpringBoot中Mybatis注解一对多和多对多查询实现示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~