2016-04-23 187 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; 
}