2016-04-23 258 views
0

項目Base豆:春:選擇默認

@Service 
public class BeanDefault implements BeanBase { 

} 

public class App { 
    @Autowired 
    private BeanBase beanBase; 
} 

項目MyDerivedBase是在行家MyDerived父,有許多其他衍生項目):

@Service 
public class MyBean implements BeanBase { 

} 

而且我想類App使用MyBean而不會干擾其他項目(它們仍然使用BeanDefault)。

我可以在這兩個項目中修改代碼BaseMyDerived(不能修改其他衍生項目的代碼),那麼該怎麼做:

  • 應用程序使用BeanDefault當它是唯一合格的豆爲BeanBase
  • 應用程序使用MyBean在我的項目

我發現,作品:

@Service 
@Primary 
public class MyBean implements BeanBase { 

} 

但我想知道,這是一個很好的做法嗎?

+0

你使用'@ Primary'的方法很好,但是你會看到現在你總是得到一個'MyBean'的實例。要有選擇地獲得另一個實例,您可以給該bean一個名稱並使用'@ Qualifier'註釋,如此處所述 - http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans- autowired-annotation-qualifiers –

+0

@BijuKunjummen「你會看到現在你總是得到一個MyBean的實例」 - 我認爲這隻發生在我的派生項目中......其他派生項目仍然使用BeanDefault ... – Sayakiss

+0

啊! ,我明白,是的,你是對的,你現在的方法會適合你。 –

回答

1

使用@Primary就好,只要有一個以上的豆注有@Primary即可。您也可以使用@Qualifier

@Service("mySpecialBean") 
public class MyBean implements BeanBase { 

} 

public class App { 
    @Autowired 
    @Qualifier("mySpecialBean") 
    private BeanBase beanBase; 
}