2014-04-24 245 views
0

我有一个项目,我使用了大量的自动装配,例如弹簧自定义自动装配

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

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

但我想客户扩展的所有类,因此,最好他们想补充一个jar到扩展的类应该可以用来代替原来的类路径。 我认为如果他们可以为bean设置一个不同的名字,例如,

@component("componentA-custom) 

我只是需要一些方法来定制自动装配过程,寻找在年底与“-custom”的bean,而是加载它原来的豆。 有没有办法做到这一点?

任何帮助表示赞赏。 谢谢, Mariusz

+0

为什么不使用'@ Qualifiers'? – Rembo

+0

如何?我不想修改我的代码或任何参考。我只想让@Autowire注释先查找任何自定义实现,然后在未找到自定义的情况下使用原始的实现。 –

回答

1

我发现一种解决方案,有

@Primary可以用于指定附加的自定义代码应该被加载的,而不是原来的代码

注释。

0

你在找什么类似于this
这应该可以帮助你解决你的问题。 如果您需要获取bean名称,您可以注入一个applicationContext实例,它将为您提供正确的bean名称(通过反向查找)。或强制执行所有beans(ComponentA和CustomImplementation)BeanNameAware

0

你在问什么可以通过@Qualifier注释完成,但它不能动态生成bean名称。

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

  1. 新豆
  2. XML配置为您的应用程序使用的新豆。
+0

我用@Component(“componentA”)注解了我的类,我想让客户创建一个用@Component(“componentA-custom”)注释的自定义实现,它应该在自动布线处理。所以基本上我需要自定义按名称查找类的方式,首先查找不同的名称,如果找不到 - 使用默认机制。 –