在下面的代码中,我在myClass.java
的private File ratesFile = new File(ratesFilePath);
行得到一个NullPointer
。
据我所知,我的属性文件很好,我正在将它导入到我的.xml
配置中,并将属性传递给我的类OK。我的getter和setter似乎也很好。关于为什么我的属性没有传递给我的类,有什么建议吗?
春季批次2.1.8
myClass.properties:
rates_file_path=/opt/rates
rates_file=rates.txt
myClass.xml:
<bean id="myClassProps" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:conf/myClass.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<bean id="myClass" class="com.stuff.blah.myClass">
<property name="ratesFilePath" value="${rates_file_path}/${rates_file}" />
</bean>
myClass.java
public class myClass implements Tasklet, InitializingBean {
private String ratesFilePath;
private File ratesFile = new File(ratesFilePath);
public String getRatesFilePath() {
return ratesFilePath;
}
public void setRatesFilePath(String ratesFilePath) {
this.ratesFilePath = ratesFilePath;
}
}
在myClass
中,
private File ratesFile = new File(ratesFilePath);
是引发代码的错误。
当调用构造函数时,ratesFilePath
和ratesFile
都被初始化。
因为ratesFilePath
没有任何可用于初始化的值,所以它被设置为null
。
当ratesFile
尝试初始化时,它将使用ratesFilePath
,即null
,并将引发NullPointerException
。
要解决此问题,请首先将ratesFile
设置为null
;
private File ratesFile = null;
在确认路径不是null
后,在ratesfilePath
的setter方法上设置ratesFile
。
public void setRatesFilePath(String ratesFilePath) {
this.ratesFilePath = ratesFilePath;
if(ratesFilePath == null) ratesFile = null;
else ratesFile = new File(ratesFilePath);
}