Spring Boot@Component注解下的类无法@Autowired的问题
title: Spring Boot@Component注解下的类无法@Autowired的问题
date: 2019-06-26 08:30:03
categories:
- Spring Boot
tags: - 注入问题
这个问题心累
在把我的一个非Web程序迁移从Spring
迁移到SpringBoot
时,出现了在@Component
注解下@Autowired
的类为null
的情况,也就是没注入成功,或者说是此类在bean
加载之前就被调用了。
试了各种办法,修改扫描包,修改@Component
注解等等,皆未成功,后来看到了一个方法,探究了一下。
@Component
public class ComponentClass {
<span class="token annotation punctuation">@Autowired</span>
<span class="token keyword">private</span> JedisClient jedisClient<span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> ComponentClass componentClass<span class="token punctuation">;</span>
<span class="token annotation punctuation">@PostConstruct</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
componentClass <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">;</span>
componentClass<span class="token punctuation">.</span>jedisClient <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>jedisClient<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
}
- 声明一个此类的静态变量,用以保存bean。
- 使用
@PostConstruct
注解,将需要注入的类添加到静态变量中。 - 接下来,使用这个静态变量来调用注入类就行了。
@PostConstruct
这个注解的具体作用就是:
注解在方法上,表示此方法是在Spring
实例化该bean
之后马上执行此方法,之后才会去实例化其他bean
。
这样在Spring
实例化ComponentClass
之后,马上执行此方法,初始化ComponentClass
静态对象和成员变量jedisClient
。