(-1)寫在前面 這兩天讀《javaweb開發王者歸來》,學到Spring的PropertyPlaceholderConfigurer時出現一個問題,我已${jdbc.name}的形式賦值給bean中的屬性,用main方法測試後,輸出屬性的值仍然是${jdbc.name}。 (0)解決問題之路 a. ...
(-1)寫在前面
這兩天讀《javaweb開發王者歸來》,學到Spring的PropertyPlaceholderConfigurer時出現一個問題,我已${jdbc.name}的形式賦值給bean中的屬性,用main方法測試後,輸出屬性的值仍然是${jdbc.name}。
(0)解決問題之路
a.我先想到是不是打錯了,於是和書上仔細的對照了一下,發現書上說的是PropertyOverrideConfigurer,但實際上配置文件中寫的是PropertyPlaceholderConfigurer,換來換去幾次沒用。
b.問了老師,在老師回去看資料的一瞬間突然有了靈感,我百度了一下,覺得找到瞭解決方案。
c.我想是不是沒導入jar包、spring版本低,導致el表達式無法解析,一開始還一個個判定,後來把能導入的都導了還是不行,
d.不斷的換描述方式去百度我的問題,晚上有人要走了,提前一起吃一頓飯,吃晚飯去打lol,又百度了一會沒有找到,於是在博問、問問上提問,到現在也沒收到回覆,英雄聯盟輸了一晚上,中途還斷電了。
c.早上的時候想是不是main方法測試的原因,把項目部署到tomcat,在index.jsp中使用還是那樣,於是乎我想到了是不是使用方式不對呢,之前也想到過PropertyPlaceholderConfigurer的bean是怎麼和使用${jdbc.name}的bean關聯到一起的,於是開始百度PropertyPlaceholderConfigurer的使用方法,間接的找到瞭解決方案。
(1)具體解決方案
其實我覺得這個問題碰到的人真不多…,可能都是第一次學spring就讀了這本書的人吧..,下麵是其中一種方式
配置文件
<bean class="service.IDaoImp" id="iDaoImp" >
<property name="name" value="${jdbc.name}"></property>
</bean>
<bean id="property" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:jdbc.properties</value>
</property>
</bean>
main方法
XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
PropertyPlaceholderConfigurer propertyPostProcessor = (PropertyPlaceholderConfigurer)beanFactory.getBean("property");
propertyPostProcessor.postProcessBeanFactory(beanFactory);
IDaoImp imp = (IDaoImp)beanFactory.getBean("iDaoImp");
System.out.println(imp.getName());
IDaoImp
public class IDaoImp
{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
jdbc.properties
jdbc.name=\u738B\u65ED
jdbc.age=21