次のようなカスタム注釈を追加する手段を作成する必要があります
@Value("${my.property}")
ただし、私の場合は、プロパティ ファイルではなくデータベースから値を取得する必要があります。
基本的に、データベースからプロパティ名と値のペアを読み取り、これらを他の Bean に属するフィールドに注入できるコンテナーの起動時に Bean を作成したいと考えています。
次のようなカスタム注釈を追加する手段を作成する必要があります
@Value("${my.property}")
ただし、私の場合は、プロパティ ファイルではなくデータベースから値を取得する必要があります。
基本的に、データベースからプロパティ名と値のペアを読み取り、これらを他の Bean に属するフィールドに注入できるコンテナーの起動時に Bean を作成したいと考えています。
アプローチ #1:
1 つの方法は、このアノテーションを持つ任意のメソッドに一致するポイントカット式を使用して、アスペクトを作成することです。
あなたのアスペクトは次のようになります。
AOP キックスタート
これは、Spring で AOP を開始するためのガイドです。
http://www.tutorialspoint.com/spring/aop_with_spring.htm
ジョインポイント マッチング
注釈に一致する結合ポイントを作成する方法を説明するリファレンスを次に示します: http://eclipse.org/aspectj/doc/next/adk15notebook/annotations-pointcuts-and-advice.html
アプローチ #2:
もう 1 つの方法は、BeanFactoryPostProcessorを使用することです。これは基本的に、PropertyPlaceholderConfigurer がどのように機能するかです。
. . 実際、アプローチ#2はあなたが望むものにもっと似ていると思います-すべての処理は「起動」時に行われます。. . (実際には、起動前であっても Bean レシピを変更します)。. 一方、AOP を使用すると、メソッド呼び出しをインターセプトすることになり、遅すぎる可能性があります。
名前空間ハンドラー
必要に応じて、独自の Spring名前空間ハンドラーを作成して、ポスト プロセッサを簡潔な方法でオンにすることもできます。例えば:
<myApp:injectFromDb />
代わりに:
<bean class="MyDatabaseLookupProcessorImpl etc, etc. />
更新: アプローチ #3
Spring 3.1 の時点で、PropertySourcesPlaceholderConfigurerもあり、ほとんどの配管が提供されるため、より少ないコードでこれを実現できます。