Spring 實現(xiàn)給Bean屬性注入null值
給Bean屬性注入null值
空字符串值可以使用<value/>元素可用來表示。例如:
<bean class="ExampleBean"> <property name="email"><value/></property> </bean>
等同于Java代碼: exampleBean.setEmail("")。
null值則可以使用<null/>元素可用來表示。例如:
<bean class="ExampleBean"> <property name="email"><null/></property> </bean>
等同于Java代碼:exampleBean.setEmail(null)。
Spring注入bean 為null的相關(guān)問題
問題描述
有一個類注入 發(fā)現(xiàn)里面的MongoLogInfoDAO始終為null
@Component("countFunction") public class CountFunction implements AviatorFunction { @Resource(name = "mongoLogInfoDAO") private MongoLogInfoDAO mongoLogInfoDAO; @Override public String getName() { return "count"; }
原因是竟然是因為使用了 new 方式使用 CountFunction 導(dǎo)致類中的mongoLogInfoDao 無法注入
AviatorEvaluator.addFunction(new CountFunction());
這個是不對的, 為啥?
這個對象是你new出來的 ,不是spring創(chuàng)建的 當然無法DI依賴注入
反之,如果你這個Bean是交易Spring IOC 容器管理的,那也應(yīng)該報錯NoSuchBeanDefinitionException異常
如何處理?
應(yīng)對這個問題的最好辦法是 不要new
還有一種情況spring 注入的時候是null
問題描述
@Component("functionExecutor") public class FunctionExecutor { protected static final Loggerx LOGGER = Loggerx.getLogger("system"); @Resource(name = "mongoDAO") private MongoDAO mongoDAO; @Resource(name = "prism4001Producer") private SmartMQProducer prism4001Producer; @Resource(name = "whereGreaterThenFunction") private WhereGreaterThenFunction whereGreaterThenFunction; @Resource(name = "countFunction") private CountFunction countFunction; @Resource(name = "devideFunction") private DevideFunction devideFunction; @Resource(name = "selectFunction") private SelectFunction selectFunction; @Resource(name = "whereEqualFunction") private WhereEqualFunction whereEqualFunction; @Resource(name = "timeFunction") private TimeFunction timeFunction; @Resource(name = "whereLessThenFunction") private WhereLessThenFunction whereLessThenFunction; @Resource(name = "whereGreaterThenEqualFunction") private WhereGreaterThenEqualFunction whereGreaterThenEqualFunction; @Resource(name = "whereInFunction") private WhereInFunction whereInFunction; @Resource(name = "greaterThenFunction") private GreaterThenFunction greaterThenFunction; @Resource(name = "regexFunction") private RegexFunction regexFunction; @Resource(name = "maxFunction") private MaxFunction maxFunction; @Resource(name = "minFunction") private MinFunction minFunction; @Resource(name = "equalFunction") private EqualFunction equalFunction; @Resource(name = "lessThenEqualFunction") private LessThenEqualFunction lessThenEqualFunction; @Resource(name = "lessThenFunction") private LessThenFunction lessThenFunction; @Resource(name = "plusFunction") private PlusFunction plusFunction; @Resource(name = "multiFunction") private MultiFunction multiFunction; @Resource(name = "notEqualFunction") private NotEqualFunction notEqualFunction; @Resource(name = "whereNotInFunction") private WhereNotInFunction whereNotInFunction; @Resource(name = "sumFunction") private SumFunction sumFunction; @Resource(name = "minusFunction") private MinusFunction minusFunction; { AviatorEvaluator.addFunction(whereGreaterThenFunction); AviatorEvaluator.addFunction(countFunction); AviatorEvaluator.addFunction(devideFunction); AviatorEvaluator.addFunction(selectFunction); AviatorEvaluator.addFunction(whereEqualFunction); AviatorEvaluator.addFunction(timeFunction); AviatorEvaluator.addFunction(whereLessThenFunction); AviatorEvaluator.addFunction(whereGreaterThenEqualFunction); AviatorEvaluator.addFunction(whereInFunction); AviatorEvaluator.addFunction(greaterThenFunction); AviatorEvaluator.addFunction(regexFunction); AviatorEvaluator.addFunction(maxFunction); AviatorEvaluator.addFunction(minFunction); AviatorEvaluator.addFunction(equalFunction); AviatorEvaluator.addFunction(lessThenEqualFunction); AviatorEvaluator.addFunction(lessThenFunction); AviatorEvaluator.addFunction(plusFunction); AviatorEvaluator.addFunction(multiFunction); AviatorEvaluator.addFunction(notEqualFunction); AviatorEvaluator.addFunction(whereNotInFunction); AviatorEvaluator.addFunction(sumFunction); AviatorEvaluator.addFunction(minusFunction); }
容器加載這個functionExecutor這個bean的時候,走到靜態(tài)代碼塊發(fā)現(xiàn)注入的sumFunction ,minusFunction都是null
這個是為什么呢?
spring 執(zhí)行代碼塊的時候,其他的bean 還未注入,會導(dǎo)致注入的bean 是null
如何處理?
如果你想 當spring加載 bean 初始化完成之后,自動執(zhí)行一些初始化方法
使用
@PostConstruct
注解可以實現(xiàn)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java注解@Transactional事務(wù)類內(nèi)調(diào)用不生效問題及解決辦法
這篇文章主要介紹了Java注解@Transactional事務(wù)類內(nèi)調(diào)用不生效問題及解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05談?wù)劄镴AXB和response設(shè)置編碼,解決wechat4j中文亂碼的問題
中文亂碼是每個程序員都會遇到的問題,本篇文章主要介紹了談?wù)劄镴AXB和response設(shè)置編碼,解決wechat4j中文亂碼的問題,具有一定的參考價值,有興趣的可以了解一下。2016-12-12Mybatis-plus中的@EnumValue注解使用詳解
這篇文章主要介紹了Mybatis-plus中的@EnumValue注解使用詳解,在PO類中,如果我們直接使用枚舉類型去映射數(shù)據(jù)庫的對應(yīng)字段保存時,往往就會因為類型不匹配導(dǎo)致映射失敗,Mybatis-plus提供了一種解決辦法,就是使用@EnumValue注解,需要的朋友可以參考下2024-02-02idea2020.1無法自動加載maven依賴的jar包問題及解決方法
這篇文章主要介紹了idea2020.1無法自動加載maven依賴的jar包問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07完整java開發(fā)中JDBC連接數(shù)據(jù)庫代碼和步驟
這篇文章主要介紹了完整java開發(fā)中JDBC連接數(shù)據(jù)庫代碼和步驟,需要的朋友可以參考下2015-09-09