java - 基于方法参数的 Autowiring

标签 java spring

我的系统正在使用各种协议(protocol)。我标记一个接口(interface)并提供适当的实现。例如,SSHprotocolHttpProtocol 都实现了 Protocol。我将来可能会添加多个。现在我的类(class)如下:-

class Test {
  @Autowired
  private Protocol protocol;

  public void getProtocol(String name) {
    return protocol;
  }
}

getProtocol 应根据 Protocol 名称返回一个 Protocol 对象。简而言之,我希望 Spring 根据名称参数 Autowiring 特定的 bean。 spring支持这个吗?我可以有多个带有相应限定符的 @Autowired 。但这可能会让我编写 10-15 个带有相应 Autowiring 注释的变量。但代码太多,难以管理。工厂可能是一个替代方案,但这将如何解决我的问题?

最佳答案

您可以 Autowiring map 类型的字段,如下所示:

@Autowired
private Map<String, Protocol> protocols;

Spring 将使用 bean 名称作为键、bean 实例作为值来填充映射。所以在你的 getProtocol 方法中你可以这样做

public void getProtocol(String name) {
    return protocols.get(name);
}

您可以通过在组件注释上指定值来调整 Bean 的名称:

@Component("http")
public class HttpProtocol ...

关于java - 基于方法参数的 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34219307/

相关文章:

java - 带有 lambda 表达式的 ActionListener 实现不能由 Timer 调用

java - 创建包含数据库值的列表并将其存储在 DTO 中

java - 一个完整的新手学习 Java 需要多长时间?

java - Java 中的“this”和 'super' 关键字用法

java - 无法在 Spring Boot 中获取属性

java - 为多个 Web 应用程序正确构建 Java Spring 框架项目

java - 使用 Spring 的 REST Api 实现

java - 如何避免用户访问 JSF 中的 .xhtml 页面?

spring - Intellij 中的 Gradle 问题

java - 每个 Spring Web 应用程序仅加载一次图像