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
。