2012-11-21 12 views
9

多くの専門家が注釈駆動型依存性注入に切り替えない主な理由は、開発/テスト/生産環境の切り替えをサポートしていないと思います。多くの場合、開発目的のために、異なるサービス(およびそれらの接続)を使用するだけでなく、それらをモックするか、またはダミーインスタンスを作成する必要があります。異なる環境を扱う注釈駆動依存性注入

@Value("#{${env} == "production" ? realService : dummyService}") 
    private SomeService service; 

...動作するはずですが、素敵ではない:

昨日は1つの春の注釈を持つソリューションを考え出しました。

私はあなたのソリューションや議論のために非常に興味があります:なぜそれは本当の問題ではありません;-) Guice、Spring、または他の人を歓迎します。

元の問題はこのスレッドの一部でした:Spring @Autowired usageしかし、私はそれが新しいスレッドを作成する価値があると思った。

答えて

9

残念ながら私はGuiceにコメントできませんが、コメントに記載されているように、Spring 3.1以降を使用している場合は、実際にSpringプロファイルを使用できます。プロファイルを使用して

AのJavaベースの構成は次のようなものを見ることができる:

@Configuration 
@Profile("production") 
public class ProductionConfig { 
    @Bean 
    public SomeService someService() { ... } 
} 

@Configuration 
@Profile("dev") 
public class DevelopmentConfig { 
    @Bean 
    public SomeService someService() { ... } 
} 

その後、あなたの消費クラスが再び簡単になる:

... 
@Autowired 
private SomeService someService; 
... 

希望プロファイルは、他の方法の中で、を介して活性化することができますシステムプロパティ:

-Dspring.profiles.active="production" 

さまざまな環境でアプリケーションを実行します。

私は個人的には、春のプロファイルにまったく依存しないようにしています。代わりに、実行時にアプリケーションに渡される外部プロパティファイルの環境差をカプセル化しようとします。このアプローチはこれまでのところうまくいきましたが、ymmv。

-1

@Value注釈は、あなたが試した方法では機能しません。それは、文字列の形でのみ値を与えることができます。あなたが達成したいものについては、@ShyJの示唆するようにSpring Profilesを試すことができます。

希望すると、これが役立ちます。乾杯。