我們知道,靜態(tài)方法不屬于某一個(gè)對(duì)象霞赫,而是類的屬性
舉個(gè)例子
public class MailUtil{
public Service service;
@Value("${name}")
public static String staticName;
public static void method(){
? ? service.modify(name);
}
}
如果我們直接使用MailUtil.method()時(shí)疑故,會(huì)拋出空指針異常,并且得到的name值是null
因?yàn)镾pring對(duì)于容器的注入是在靜態(tài)方法之后的轨功,所以在Spring進(jìn)行bean的注入時(shí)汗茄,這部分?jǐn)?shù)據(jù)會(huì)被還原(本身spring是不推薦用靜態(tài)方法外定義靜態(tài)屬性的)需要在容器啟動(dòng)的時(shí)候把這部分再次賦予值
對(duì)于服務(wù)等bean的注入,需要通過構(gòu)造函數(shù)來實(shí)現(xiàn)的
@Autowired
public MailUtils(Service service){
? ? ? ? return MailUtils.service = service;
}
對(duì)于值的注入(通過set注入)
@Value("${name}")
public void setStaticName(String? name){
? ? ? ? staticName = name;
}
這樣啟動(dòng)項(xiàng)目后就不會(huì)取不到服務(wù)和值了