2017-06-08 6 views
0

サービスのJava APIを開発していて、ライブラリに展開したいと思います。 私は今、単純なPOJOですApiConfigと呼ばれるBeanがあり春4.3.3コンテキストの開始前に外部Beanを提供する

を使用しています。

public class ApiConfig { 
    private String host; 
    private String username; 
    private String password; 
} 

であり、値はプロパティファイルから読み取られます。

の前にこのクラスを構築して提供したいと考えています(いくつかのコンポーネントはこのクラスを@Autowiredとして依存しています)。例えば

public class LoginService { 

    @Autowired 
    private ApiConfig apiConfig 

    [...] 
} 

基本的に、私はこのような何かやりたい:

public static MyApi get(ApiConfig apiConfig) { 

    //Here I want to provide this apiConfig as singleton bean that would be used everywhere 
    provide somehow this class as bean 
    // here all beans are loaded and the it fails because it cannot resolve ApiConfig 
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ContextConfig.class); 
    MyApi myApi= context.getBean(MyApi.class); 
    return myApi; 
} 

メソッドMyApi.get(のAppConfig)は、依存関係を追加することによって、他のJavaアプリケーションで使用されますin pom.xml

これを行う方法はありますか? ApiConfig Beanを提供し、すべてのアプリケーションを初期化しますか?

基本的に春はこのBeanもあることを知っているように、new AnnotationConfigApplicationContext(ContextConfig.class)

UPDATE

でコンテキストを開始する前に、アイデアは、このライブラリを使用して任意のアプリケーションでは、これでしょう。

public static void main(String asdas[]) { 
    ApiConfig config = new ApiConfig(); 
    config.setUsername("BOBTHEUSER"); 
    //config.set etc 
    MyApi api = MyApi.get(config); 
    api.doOperation(); 
+0

なぜ変更しましたか?ちょうどそれを通常の春の豆にして、値を注入するだけです。アプリケーションコンテキストの範囲外で初期化する必要はありません。 –

+0

更新された質問 – Manza

答えて

0

実際には@Autowireで十分です。 ApiConfigをBeanにして、それが必要な場所にautowireします。 Springは適切な順序を解決します。あなたは2つのBeanがあり、もう1つはthe exampleから作成使用@DependsOn注釈

@Configuration 
public class MainConfig { 
    @Autowired 
    private ApiConfig apiConfig 

    @Bean(name="apiConfig") 
    public ApiConfig apiConfig(){ 
     ... init the config ... 
     return apiConfigInstance; 
    } 

    @Bean(name="myApi") 
    @DependsOn("apiConfig") 
    public MyApi myApi(){ 
     MyApi api = new MyApi(apiConfig); 
     return api; 
    } 
} 

コード前に初期化される第2の必要がある場合は

+0

設定ファイルの値をハードコードできません。これらの値は外部ソースによって提供されます – Manza

+0

更新された質問 – Manza

+0

私は構成ファイルについて言及しませんでした。私は、あなたが望むロジックを追加することができる構成クラスを意味します。ファイルから、DBから、外部ソースなどから読み込みます。 – StanislavL

関連する問題