如何使用注释按名称覆盖Spring服务bean
鉴于我将Spring bean配置为
@Service("myService")
public class DefaultService extends MyService {
}
和一个使用这个bean的类
public class Consumer {
@Autowired
@Qualifier("myService")
private MyService service;
...
}
我现在希望我的项目(包括前面的类)能够注入另一个MyService
的实现。因此我想覆盖豆myService
@Service("myService")
public class SpecializedService implements MyService {
}
导致Consumer
现在携带SpecializedService
而不是DefaultService
的实例。根据定义,我不能在Spring容器中有两个具有相同名称的bean。我怎么能告诉spring,新服务的定义是否会覆盖旧服务?我不想修改Consumer
类。
没有找到相关结果
已邀请:
4 个回复
款去芳尾脊
或组件扫描它。 在任何一种情况下,在您的应用程序上下文中,避免显式定义DefaultService并避免对其进行组件扫描。
先对冈蒲
不确定是否有办法只使用注释(除了从DefaultService中删除@Service注释)。
踩什不
Spring建议将XML用于服务和存储库bean以及MVC bean的注释。它还建议@Autowired没有组件扫描。但是注释通常受到鼓励,尽管它将代码和配置合并在一起(针对关注点的分离)。 第二件事是使用@Qualifiers(“声明bean的id”)传递它。
伐教爸
在自动装配它们时(例如在Controller中),您可以使用@Qualifier注入所需的实现,如下所述。 获得默认实现
获得专门的实施