我正在努力学习Spring框架的基础知识。我在sping.xml中使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
来打印PointA的属性,但我收到的错误如下。
Triagle类
package org.stack;
import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class Triangle {
private Point PointA;
private Point PointB;
private Point PointC;
private ApplicationContext context = null;
public Point getPointA() {
return PointA;
}
public void setPointA(Point pointA) {
PointA = pointA;
}
public Point getPointB() {
return PointB;
}
public void setPointB(Point pointB) {
PointB = pointB;
}
public Point getPointC() {
return PointC;
}
public void setPointC(Point pointC) {
PointC = pointC;
}
public void draw() {
System.out.println("Point A = (" + getPointA().getX() + ", "
+ getPointA().getY() + ")");
System.out.println("Point B = (" + getPointB().getX() + ", "
+ getPointB().getY() + ")");
System.out.println("Point C = (" + getPointC().getX() + ", "
+ getPointC().getY() + ")");
}
}
DrawingApp
package org.stack;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DrawingApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
context.registerShutdownHook();
Triangle triangle = (Triangle) context.getBean("triangle");
triangle.draw();
}
}
spring.xml
</bean>
<!-- We intialize here 3 Points objects -->
<bean id="pointA" class="org.stack.Point">
<property name="x" value="${PointA.pointY}" />
<property name="y" value="${PointA.pointY}" />
</bean>
<bean id="pointB" class="org.stack.Point">
<property name="x" value="-20" />
<property name="y" value="0" />
</bean>
<bean id="pointC" class="org.stack.Point">
<property name="x" value="20" />
<property name="y" value="0" />
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="pointsconfig.properties"></property>
</bean>
pointsconfig.properties文件
PointA.pointX=0
PointA.pointY=0
错误
Mai 31, 2016 1:25:24 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFORMATION: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@619a5dff: startup date [Tue May 31 13:25:24 CEST 2016]; root of context hierarchy
Mai 31, 2016 1:25:24 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFORMATION: Loading XML bean definitions from class path resource [spring.xml]
Mai 31, 2016 1:25:25 PM org.springframework.beans.factory.config.PropertyPlaceholderConfigurer loadProperties
INFORMATION: Loading properties file from class path resource [pointsconfig.properties]
Mai 31, 2016 1:25:25 PM org.springframework.context.support.ClassPathXmlApplicationContext refresh
WARNUNG: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [pointsconfig.properties] cannot be opened because it does not exist
Exception in thread "main" org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [pointsconfig.properties] cannot be opened because it does not exist
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:89)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:284)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:166)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at org.stack.DrawingApp.main(DrawingApp.java:14)
Caused by: java.io.FileNotFoundException: class path resource [pointsconfig.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:153)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:98)
at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:175)
at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:156)
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:80)
... 7 more
答案 0 :(得分:8)
将pointsconfig.properties
文件移至资源目录。
答案 1 :(得分:3)
您的问题是,您尝试访问包org.stack
中的文件,因此您需要提供下一个Spring
的完整路径:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/org/stack/pointsconfig.properties"/>
</bean>
答案 2 :(得分:0)
<context:property-placeholder location="classpath:deep/com/sport.properties" />
<bean id ="myTeam" class ="deep.com.CricketTeam">
<property name="emailAddr" value="${foo.email}"/>
<property name="teamName" value="${foo.team}"/>
</bean>
答案 3 :(得分:-1)
尝试将pointsconfig.properties文件移动到src目录。它应该可以解决问题。