1

キーと値のペアを含むプロパティ ファイルがあります。

key1=value1
key2=value2

今、私のコントローラーで、プロパティ ファイルの値を直接出力したいと思います (もちろん、web.xml / app-servlet.xml を使用してプロパティ ファイルを読み込んだ後)。

System.out.printl(${key1});

それは可能ですか?

そうでない場合は、すべての定数変数を使用してインターフェイスを作成し、プロパティ ファイルから値を読み取りたいと考えています。どうすればいいのですか??

public interface MyConstants
{
      @Value("${key1}")
      public static final KEY_1="";
}

しかし、予想どおり、空の文字列のみが割り当てられます。

この問題を解決するにはどうすればよいですか? または、プロパティ ファイルを使用して値を取得する最良の方法は何ですか? 前もって感謝します...

4

3 に答える 3

5

クラスの代わりに 'MyConstants' のインターフェースを持つことが正しくない理由は 2 つあります。

1) Spring は、実装を持たないインターフェースに値を注入できません。単にインターフェイスをインスタンス化できないためです。Spring は単なるファクトリであり、インスタンス化できる「もの」でのみ機能することを忘れないでください。

2) もう 1 つの理由は、定数を格納するためのインターフェイスを持つこと自体がアンチパターンであることです。それは、インターフェースが設計されているものではありません。定数インターフェイスのアンチパターンを参照することをお勧めします。

http://en.wikipedia.org/wiki/Constant_interface

于 2013-06-03T06:10:12.770 に答える
1

「定数」クラス/インターフェースを作成することは広く使用されているアプローチですが、それには欠陥のあるアプローチだと思います。システム内のさまざまなレイヤーのクラスが 1 つの定数クラスに依存して突然開始されるという奇妙な結合が作成されます。また、定数クラスを見ると、どの定数が誰によって使用されているのかがわかりにくくなります。抽象化を完全に嘲笑しているという事実は言うまでもありません。jspに表示するエラーメッセージ、サードパーティAPIのユーザー名とパスワード、スレッドプールサイズなどに関する情報を含む定数クラスが突然あります..すべてが1つの「すべてを知っている」クラスにあります。

そのため、定数クラス/インターフェイスはできるだけ避けてください。コントローラー/サービスを見て、特定のサービス クラスがプロパティ ファイルで公開したい特定の構成値を必要とする場合は、それをクラスに注入し、インスタンス レベルの定数として格納します。この設計は、抽象化の観点からははるかにクリーンであり、このクラスを簡単に単体テストするのにも役立ちます。

Spring では、次のようにプロパティ ファイルへのハンドルを作成できます。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:my-application.properties" />       
</bean>

コードが示すように、ここで複数のプロパティ ファイルを指定できます。これを行った後、次のように、コンテキスト内の他の場所で、前述のプロパティ ファイルからキーを参照できます。

<bean id="xx" class="com.xx.SomeClass" p:imageUrl="${categories.images}"/>

ここのSomeClassインスタンスには、 というプロパティがあり、これには、 というプロパティ ファイルのキーimageUrlに対して指定された値が注入されます。categories.imagesmy-application.properties

お役に立てれば。

于 2013-06-03T07:01:51.830 に答える