2016-11-13 18 views
0

xmlからjava configに切り替えようとしています。Java Config複数の設定クラスにある同じアノテーションBean

私たちはコアライブラリを持っており、コアライブラリを使用する実装をしています。各実装にはwebappとcliもあります。私は設定をモジュール化しようとしています。特定のパッケージに対してコンポーネントスキャンを使用しています。私はconfigクラスで循環依存関係の問題に遭遇しています。私は、複数のjava configクラスで作成されたBeanに同じ@Componentを注入する必要があります。私の設定は次の通りです:

@Configuration 
@ComponentScan(basePackages = {"my.components"}) 
@ImportResource({ 
     "classpath:data-access-config.xml" 
}) 
@PropertySource(value = "classpath:core.props", ignoreResourceNotFound = true) 
public class CoreAppConfig { 
    @Autowired 
    Environment env; 

    @Autowired 
    ComponentBean bean; 

    @Bean 
    public MyBean myBean() { 
     return new MyBean(bean); 
    } 
} 


@Configuration 
@Import({CoreAppConfig.class}) 
@PropertySource(value = "classpath:my-app.props") 
public class MyAppConfig { 
    @Autowired 
    Environment env; 

    @Autowired 
    ComponentBean bean; 

    @Bean 
    public MyBean2 myBean2() { 
     return new MyBean2(bean); 
    } 
} 


@Configuration 
@ComponentScan(basePackages = {"my.app.services"}) 
@Import({MyAppConfig.class, CoreAppConfig.class}) 
public class MyWebAppConfig { 
    @Autowired 
    Environment env; 

    @Autowired 
    MyAppConfig myAppConfig; 

    @Autowired 
    ComponentBean bean; 

    @Bean 
    public MyRestService myRestService() { 
     return new MyRestService(bean); 
    } 
} 

これを解決するにはどうすればよいでしょうか?

1オプションはコンポーネントスキャンを使用しないことです。その他?

編集:私は取得しています

例外はBeanCurrentlyInCreationExceptionです。 @Import({CoreAppConfig.class})またはMyAppConfigから@Autowired ComponentBean Beanを削除すると、問題は解決しません。

EDIT 2:

だから私は、これは特定のBeanとの循環依存関係の問題だと思います。私は他の豆と一緒に私がしたいことをすることができます、この特定の豆だけが私に問題を与えている。

循環依存性を判断する上でのヒントはありますか?

EDIT 3:

いいので、私は犯人を考え出しました。 CoreAppConfigでは、Bean MyPropsBeanを作成します。 MyAppConfigでは、同じMyPropsBeanを作成します。 CoreAppConfig.MyPropsBeanMyAppConfig.MyPropsBeanで上書きしたいと考えていました。私はこの問題が原因と考えています。CoreAppConfigMyAppConfig autowire ComponentBeanです。どうすれば解決できますか?どのようなBeanをオーバーライドするための最良の方法は?

+0

正確な問題は何ですか? IDE警告などのエラーを投稿してください。 – GurV

+0

1. **インポート**を削除するとき、あなたの設定はパラレルにロードされ、CoreAppConfigは** MyAppConfig ** - > ** Autowired **に必要な** bean **を作成します。エラー。 2. ** MyAppConfig **で** Autowired **を削除した場合、** bean **の場合は** CoreAppConfig **を参照する必要はありません。 –

+0

@Gurwinder Beanをどのように上書きするのが良いかに関するアイデアはありますか? – rodney757

答えて

0

だから私はこれを解決するために、MyAppConfig beanの作成を別のconfigクラスに移しました。次に、@PropertySourcesを使用して、動的パラメータを渡すMyAppConfig Beanを作成します。

関連する問題