Spring从头开始 - 上下文中的Bug:property-placeholder

时间:2011-02-09 02:10:13

标签: java spring

我正在使用 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}

我被困在这里,任何线索,提示???


仅供参考

  • 我使用THIS 教程进行测试,也许可以提供帮助。
  • 我添加了log4j maven依赖项和log4j配置文件,一切正常!所以Spring和log4j正在“src / main / resource”
  • 中找到文件
  • 我正在使用 maven ,并运行我的应用,我正在使用:

      

    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");
  • 理解和阅读的好地方是HERE
  • 谢谢大家的帮助!

3 个答案:

答案 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也不包含。如果找不到您的配置文件,您应该发出一条消息说明。