2011-02-09 12 views
1

非常に簡単なアプリケーションを使用していくつかのテストを行っています。スプリングを使用しています。Spring from scratch - コンテキスト上のバグ:プロパティ - プレースホルダ

私のアプリは唯一1豆を持っていると私は、このクラスには、単純な文字列を注入し、この値を印刷しています。 これまでのすべての作業

私は、構成ファイルからこの文字列を取得したいので、私は/srcに/私が何をしたか、メイン/リソース

内のファイルを作成します。私は必要なもの


1)オン私のアプリケーションコンテキスト。 XML私が追加:

<context:property-placeholder location="classpath:myConfigFile.properties" /> 

2)アプリケーションのcontext.xml私は$ {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} 

そして私は、ここでは任意の手掛かり、ヒントを立ち往生していますか? ??


だけFYI

  • 私は多分助けることが、私のテストのためにTHISチュートリアルを使用しています。
  • 私はlog4j maven依存関係とlog4j設定ファイルを追加して、すべて正常に動作します!春とlog4jのは、私がのmavenを使用していて、私のアプリを実行するために、「SRC /メイン/リソース」
  • 内のファイルを見つけているので、私が使用しています:

    MVNクリーンコンパイルexecをします。java


SOLUTION説明:

根本的な原因は、私が手にしてどのようにしました私のJavaクラスのapplication-context.xmlを実行してください。

私がやっていた:理解し、読むのに適した場所はすべてのためのHERE

  • おかげで

    ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml"); 
    
    • BeanFactory factory = new XmlBeanFactory(new ClassPathResource("application-context.xml")); 
      

      をして、この記事の後、私はそれを変更します助けて!

  • +0

    1)と2)は同じファイルに配置されていますか? – axtavt

    +0

    @axtavt - 両方のシナリオで同じ出力がapplication-context.xml –

    答えて

    4

    ここで唯一の問題は、ApplicationContextの代わりにBeanFactoryを使用することです。 ApplicationContextと比較してBeanFactoryには、<context:property-placeholder>に必要なポストプロセッサーの自動登録を含むいくつかの高度な機能が欠けています。

    +0

    この質問はばかげているかもしれませんが、私がApplicationContextまたはBeanFactoryで動作していることを確認する方法はありますか?御時間ありがとうございます! –

    +0

    @Castanho:これは、Spring Containerを 'XmlBeanFactory'や' ClasspathXmlApplicationContext'のようなものとしてインスタンス化する方法に依存します。 – axtavt

    +0

    @axtavt、私は使用しています:BeanFactory factory = new XmlBeanFactory( new ClassPathResource( "application-context.xml")); –

    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" /> 
    
    +0

    でステップ1と2が実行されました。クラスパスの後に*を追加する前に試しました。助けてくれてありがとう! –

    +0

    ログを確認するだけです: "生成されたbean名[org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0]"を使用してXML "id"も "name"も指定されていません " –

    1

    あなたのconfigが細かいです。私の推測では、プロパティファイルはクラスパス上に見つからないということです。コンフィグレーターに関して春ログがありますか?実行してみましょう:ちょうどクラスファイルにソースファイルをコンパイルし、明らかにコンパイルしながら、これは、あなたのsrc/main/resourcesコンテンツをバンドルしますアーティファクト(jarファイル)を作成します

    mvn clean install exec:java

    私もテストケースを試してみるかもしれません。あなたのポンポンに春のテストを追加します。

    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()); 
        } 
    } 
    

    あなたのBeanがどちらかが含まれていないので、何のIDまたは名前のメッセージは単なる警告ではありません。あなたの設定ファイルが見つからなかった場合は、あなたにも同様のメッセージが表示されます。

    +0

    私は、あなたが私の発見を知らせてください。 –

    +0

    私はここであなたのテストのヒントを開発し、働いています!ありがとう! 1つはあなたのために! –

    関連する問題