当前位置: 首页 > 知识库问答 >
问题:

如果注入了@Autowired@Qualifier,如何避免在重构期间更改bean名称

李森
2023-03-14

默认情况下,用@Component注释的 bean 可以通过第一个字母小写的短类名来解决,例如类 x.y.z.Foo -

但是,在重构时,bean 可以从 Foo 重命名为 Bar并且@Qualifier中的所有引用都应该相应地重命名,从 @Qualifier(“foo”)@Qualifier(“bar”),否则,我们在运行时上会出现错误。

有没有一种方法可以在运行前方便地搜索这样的beans,或者至少得到一个编译时错误或警告?

我现在看到的最好方法是创建一个注册表类并将所有bean名称保留在那里:

public final class BeanNames {
     public static final String FOO = "foo";
     ...
}

@Component(BeanNames.FOO)
class Foo { ... }

class Baz {
   @Autowired
   @Qualifier(BeanNames.FOO)
   Foo foo;
   ...

共有1个答案

苏志
2023-03-14

您可以创建一个基于标准@Qualifier的自定义限定符注释:

@Target({ElementType.CONSTRUCTOR, ElementType.FIELD,
         ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface QualifierFoo {}

然后用它注释你的组件类:

@Component
@QualifierFoo
class Foo { ... }

并像任何其他带有限定符的bean一样注入它:

class Baz {
   @Autowired
   @QualifierFoo
   Foo foo;
   ...

然后,当您将 Foo 重构为 Bar 时,您需要做的就是将限定符名称从限定符 Foo 重构为限定符栏

 类似资料:
  • 本文向大家介绍Java Web 如何避免 SQL 注入?相关面试题,主要包含被问及Java Web 如何避免 SQL 注入?时的应答技巧和注意事项,需要的朋友参考一下 使用预处理 PreparedStatement。 使用正则表达式过滤掉字符中的特殊字符。

  • 本文向大家介绍什么是sql注入?如何避免sql注入?相关面试题,主要包含被问及什么是sql注入?如何避免sql注入?时的应答技巧和注意事项,需要的朋友参考一下 用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。 详细参考复习ppt。举例子,摆事实! 1' or 1=1

  • 问题内容: 在下面的示例代码中,表名称是一个输入参数。在这种情况下,如何避免使用进行SQL注入。下面是示例代码,我尝试使用它来避免它,但是它不起作用。谁能告诉我如何纠正它? 输出:打印消息: 所有输入参数将完全替换,并删除一行。请让我知道如何处理这种情况。 问题答案: 您可以将表名包含在 但是,如果使用两部分命名约定,例如,则必须添加其他解析,因为这将导致: 无效的对象名称[dbo.tablena

  • 问题内容: @Scheduled(fixedDelay = 5000) public void myJob() { Thread.sleep(12000); } 如果先前的例程尚未完成,如何防止此spring作业运行? 问题答案: 使用,该时间段是在工作完成后计算的,因此无需担心。

  • 当使用指定的bean注入点时,如何扩展命名bean? 我的项目1由3个spring Bean组成: 这个项目被捆绑到一个jar中,并作为我的第二个项目的依赖项包含在内: 我想发生的是将bean注入到的setter方法中。不幸的是,我收到了一个错误。 组织。springframework。上下文注释。冲突BeanDefinitionException:bean类[Bean1Child]的注释指定的b

  • 我有两个EJB实现相同接口,我有一些限定符: 而且 和我的错误: 原因:org.jboss.weld.exceptions.deploymentexception:Weld-001408:类型IConnectorService的依赖关系不满足,其限定符为@MetrilioConnector在注入点[UnbackedAnnotatedField]@MetrilioConnector@Inject c