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配置,因为它覆盖了基于注释的配置。您的客户必须提供:
我找到了一个解决办法 @初级的
可用于指定应加载添加的自定义代码而不是原始代码的注释。为什么不使用
@Qualifiers
?如何使用?我不想修改我的代码或任何引用。我只希望@Autowire注释首先查找任何自定义实现,如果找不到自定义,则使用原始实现。我用@Component(“componentA”)
对我的类进行了注释,我希望让客户创建一个用@Component(“componentA custom”)进行注释的自定义实现
应在自动布线过程中拾取。因此,基本上我需要自定义按名称查找类的方式,以便首先按不同的名称查找,如果找不到,则使用默认机制。