我正在使用 Spring 对非常非常简单的应用程序进行一些测试。
我的应用只有一个bean ,我正在为此类注入一个简单的 String 并打印此值。 到目前为止所有工作。
我想从配置文件中获取此String,因此我在 / src / main / resource
中创建了该文件我做了什么:
1)在我的 application-context.xml 上添加:
<context:property-placeholder location="classpath:myConfigFile.properties" />
2)在我的 application-context.xml 上,我从简单的String更改为使用$ {name_test}:
<bean id="hello" class="com.dummy.SayHello">
<property name="name" value="${name_test}" />
</bean>
3)我仔细检查 myConfigFile.properties 并包含“name_test = JackTheRipper”
4)但是我的输出不是“翻译”配置文件中的值,我在运行应用程序时输出了这个:
Hello ${name_test}
我被困在这里,任何线索,提示???
仅供参考
mvn clean compile exec:java
根本原因是我如何在我的java类上获取 application-context.xml 。
我在做:
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("application-context.xml"));
然后在这篇文章后我将其改为:
ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
答案 0 :(得分:4)
我能想到的唯一问题是您使用BeanFactory
代替ApplicationContext
。与ApplicationContext
相比,BeanFactory
错过了一些高级功能,包括后处理程序的自动注册,这是<context:property-placeholder>
所必需的。
答案 1 :(得分:1)
只是为了好奇,而不是使用<context:property-placeholder>
,你可以尝试一下吗?
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:myConfigFile.properties</value>
</property>
</bean>
如果这不起作用,请尝试在*
之后添加classpath
: -
<context:property-placeholder location="classpath*:myConfigFile.properties" />
答案 2 :(得分:1)
你的配置很好。我的猜测是你的属性文件在类路径上找不到。是否有关于配置器的Spring日志记录?尝试运行:
mvn clean install exec:java
这将创建一个工件(jar),它将捆绑您的src/main/resources
内容,而编译显然只是将源文件编译为类文件。
我也可以尝试一下测试用例。将弹簧测试添加到您的pom:
<强> POM 强>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>[YOUR SPRING VERSION]</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
</dependency>
<强>测试强>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:application-context.xml")
public class TestSayHello
{
@Autowired
@Qualifier("hello")
private SayHello hello;
@Test
public void testSayHello()
{
Assert.assertNotNull(hello);
Assert.assertEquals("JackTheRipper", hello.getName());
}
}
no id或name消息只是一个警告,因为你的bean也不包含。如果找不到您的配置文件,您应该发出一条消息说明。