2016-09-19 8 views
1

クラスがあります。クラスはコンフィグレーションクラスで、プロファイル "production"がアクティブになっているときにのみ実行されます。しかし、クラスBここでは、アプリケーションの主なロジックは、クラスAで作成されたいくつかのBeanを参照する@Autowiredアノテーションを使用しています、私の問題は、例えばプロファイルを使ってアプリケーションを実行すると "default適切なBeanが作成されないため例外がスローされます。だから私の質問は、プロファイル "production"がアクティブな場合にのみ、このAutowiredをクラスBでどのように使用できるかです。Java Spring Autowiring with profile

+1

ユースケースによっては、2つのクラスが実装するインターフェイスを作成するだけです。 1つは実クラス、もう1つはノーオペレーションクラスです。 – Schaka

答えて

2

あなたがインターフェイスの2つの実装を持って提供

<beans> 
    <alias name="${a.class}" alias="A"/> 
    <context:property-placeholder location="app.properties"/> 
<beans> 

app.propertiesが含まれている必要があり

a.class=A_dev 

次にプロパティを変更すると、注入されたクラスが変更されます(アプリの再起動が必要になります)。

などの他の解決策がある:スプリングEL#を使用

  • 何かに依存して、異なるA実装を返すビーンファクトリーを作成

      達人(ビルド時間)と
    • フィルタリングXMLコンテキスト
    • は{式}
  • 3

    私はあなたの質問を理解しませんでした。オプションのBeanを注入する必要がある場合は、修飾ビーンを持たない環境で@Autowired(required = false)を使用して、関連するプロパティーをnullにできます。

    public interface A {} 
    
    @Component(value="A_dev") 
    public class ADev implements A {} 
    
    @Component(value="A_prod") 
    public class AProd implements A {} 
    
    public class B { 
        @Autowired @Qualifier("A") A a; 
    } 
    

    は別名を持つXML設定とプロパティのプレースホルダを追加します:

    関連する問題