春季定制自动装配

时间:2014-04-24 10:10:32

标签: java spring dependency-injection autowired

我有一个项目,我使用大量自动装配,例如

@Component("componentA")
public class ComponentAImpl implements ComponentA

@Component("componentB")
public class ComponentBImpl implements ComponentB {
   @Autowired
   private ComponentA componentA;
}

但是我希望客户扩展所有类,所以理想情况下他们只需要在类路径中添加一个jar,而应该使用扩展类而不是原始类。 如果他们可以为bean设置不同的名称,我认为会很棒。

@component("componentA-custom)

我只需要一些方法来自定义autowire进程以在末尾查找带有“-custom”的bean并加载它而不是原始bean。 有没有办法做到这一点?

任何帮助表示赞赏。 谢谢, 马里乌什

3 个答案:

答案 0 :(得分:1)

我找到了解决方案,有

  

@Primary

注释,可用于指定应加载自定义代码而不是原始代码。

答案 1 :(得分:0)

您正在寻找的内容与this类似 这应该可以帮助您解决问题。 如果你需要获取bean名称,你可以注入一个applicationContext实例,它将获得正确的bean名称(通过反向查找)。或强制所有bean(ComponentA和CustomImplementation)实现BeanNameAware

答案 2 :(得分:0)

您所询问的内容可以通过@Qualifier注释完成,但不能动态生成bean名称。

要允许外部bean,您需要为此创建XML配置,因为它会覆盖基于注释的配置。您的客户必须提供:

  1. 新豆
  2. 使用新bean的应用程序的XML配置。