Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring自定义自动布线_Java_Spring_Dependency Injection_Autowired - Fatal编程技术网

Java Spring自定义自动布线

Java Spring自定义自动布线,java,spring,dependency-injection,autowired,Java,Spring,Dependency Injection,Autowired,我有一个项目,我大量使用自动布线,例如 @Component("componentA") public class ComponentAImpl implements ComponentA @Component("componentB") public class ComponentBImpl implements ComponentB { @Autowired private ComponentA componentA; } 但我希望客户扩展所有的类,所以理想情况下,他们只需在

我有一个项目,我大量使用自动布线,例如

@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。 有办法吗

谢谢你的帮助。 非常感谢。
Mariusz

你正在寻找的东西与之类似。
这会帮助你解决你的问题。
如果需要获取bean名称,可以插入applicationContext实例,该实例将获得正确的bean名称(通过反向查找)。或者强制所有bean(ComponentA和CustomImplementation)实现
BeanNameWare

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

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

  • 新豆
  • 使用新bean的应用程序的XML配置

  • 我找到了一个解决办法

    @初级的


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

    为什么不使用
    @Qualifiers
    ?如何使用?我不想修改我的代码或任何引用。我只希望@Autowire注释首先查找任何自定义实现,如果找不到自定义,则使用原始实现。我用
    @Component(“componentA”)
    对我的类进行了注释,我希望让客户创建一个用
    @Component(“componentA custom”)进行注释的自定义实现
    应在自动布线过程中拾取。因此,基本上我需要自定义按名称查找类的方式,以便首先按不同的名称查找,如果找不到,则使用默认机制。