Spring Boot 选择注入相同类型 @Bean 的几种方式

发布于 2024-11-11 16:07:07 字数 5482 浏览 5 评论 0

Spring 默认是通过类型注入 Bean 的,所以当存在多个相同类型的 Bean 时,需要指定 Bean 的名称才可正确注入。

项目目录结构:

C:.
│   .classpath
│   .project
│   pom.xml
│
├───.settings
│       org.eclipse.core.resources.prefs
│       org.eclipse.jdt.apt.core.prefs
│       org.eclipse.jdt.core.prefs
│       org.eclipse.m2e.core.prefs
│
└───src
    └───main
        ├───java
        │   └───net
        │       └───wuxianjie
        │           └───demo
        │                   Config.java
        │                   DemoApplication.java
        │                   VersionController.java
        │
        └───resources
                application.yml

@Autowired@Qualifier

Config.java 代码为:

package net.wuxianjie.demo;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

  @Bean("v1")
  public Map<String, String> versionConfig() {
    return new HashMap<String, String>() {
      {
        put("version", "v1.0");
      }
    };
  }

  @Bean("v2")
  public Map<String, String> version2Config() {
    return new HashMap<String, String>() {
      {
        put("version", "v2.0");
      }
    };
  }
}

VersionController.java 代码为:

package net.wuxianjie.demo;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class VersionController {

  @Autowired
  @Qualifier("v2")
  private Map<String, String> config;

  @GetMapping("/test")
  public String test() {
    return config.get("version");
  }

}

固定方法名

Config.java 代码为:

package net.wuxianjie.demo;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

  @Bean
  public Map<String, String> versionConfig() {
    return new HashMap<String, String>() {
      {
        put("version", "v1.0");
      }
    };
  }

  @Bean
  public Map<String, String> version2Config() {
    return new HashMap<String, String>() {
      {
        put("version", "v2.0");
      }
    };
  }
}

VersionController.java 代码为:

package net.wuxianjie.demo;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class VersionController {

  @Autowired
  private Map<String, String> version2Config;

  @GetMapping("/test")
  public String test() {
    return version2Config.get("version");
  }

}

通过 @Resource (名称)

Config.java 代码为:

package net.wuxianjie.demo;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

  @Bean
  public Map<String, String> versionConfig() {
    return new HashMap<String, String>() {
      {
        put("version", "v1.0");
      }
    };
  }

  @Bean
  public Map<String, String> version2Config() {
    return new HashMap<String, String>() {
      {
        put("version", "v2.0");
      }
    };
  }
}

VersionController.java 代码为:

package net.wuxianjie.demo;

import java.util.Map;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class VersionController {

  @Resource(name = "version2Config")
  private Map<String, String> config;

  @GetMapping("/test")
  public String test() {
    return config.get("version");
  }

}

通过 @Resource@Qualifier (类型)

Config.java 代码为:

package net.wuxianjie.demo;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

  @Bean("v1")
  public Map<String, String> versionConfig() {
    return new HashMap<String, String>() {
      {
        put("version", "v1.0");
      }
    };
  }

  @Bean("v2")
  public Map<String, String> version2Config() {
    return new HashMap<String, String>() {
      {
        put("version", "v2.0");
      }
    };
  }
}

VersionController.java 代码为:

package net.wuxianjie.demo;

import java.util.Map;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class VersionController {

  @Resource(type = Map.class)
  @Qualifier("v2")
  private Map<String, String> config;

  @GetMapping("/test")
  public String test() {
    return config.get("version");
  }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

白昼

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

johnliu

文章 0 评论 0

她如夕阳

文章 0 评论 0

17380058762

文章 0 评论 0

呆头

文章 0 评论 0

934062727

文章 0 评论 0

余生共白头

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文