SpringBoot中,怎样把自定义的yml配置文件中的内容和对应类的bean对象取出 ...

守听  金牌会员 | 2024-10-3 20:09:44 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

首先 yml文件中的自定义配置如下
  1. login-type-config:
  2.   types:
  3.     k1: "yuheng0"
  4.     k2: "yuheng1"
复制代码
我们有两个对应的类,yuheng0 和 yuheng1 ,他们都实现了say接口,并且重写了say方法。下面要通过请求k1 k2 获取yuheng0 和 yuheng1类的bean对象。
留意,要记得加上Component注解   交给IOC容器管理他们
这两个类的详细内容如下
  1. package com.example.demo;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class yuheng0 implements say{
  5.     public void say(){
  6.         System.out.println("yuheng0");
  7.     }
  8.     @Override
  9.     public String toString() {
  10.         return "k1 to string";
  11.     }
  12. }
复制代码
  1. package com.example.demo;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class yuheng1 implements say{
  5.     public void say(){
  6.         System.out.println("yuheng1");
  7.     }
  8.     @Override
  9.     public String toString() {
  10.         return "k2 to string";
  11.     }
  12. }
复制代码
  1. package com.example.demo;
  2. public interface say {
  3.     void say();
  4. }
复制代码
下面是配置类,可以这么写配置来读取自定义配置的信息。这边的map是string string类型的,也就是单纯的把配置类的信息以String的形式读到map内里
  1. package com.example.demo;
  2. import org.springframework.boot.context.properties.ConfigurationProperties;
  3. import org.springframework.stereotype.Component;
  4. import java.util.Map;
  5. @Component
  6. @ConfigurationProperties(prefix = "login-type-config") // 注意要对应
  7. public class LoginTypeConfig {
  8.     private Map<String,String> types;
  9.     public Map<String, String> getTypes() {
  10.         return types;
  11.     }
  12.     public void setTypes(Map<String, String> types) {
  13.         this.types = types;
  14.     }
  15. }
复制代码
最后就是最关键的逻辑,实现ApplicationContextAware接口,他可以根据名称从ioc容器中取出对应的bean
这次我们自定义的map类型是string 和 say。根据名称拿到对应的bean对象,也就是yuheng0和yuheng1的对象。放到自定义的map内里。在请求test的时间,从map中拿出已经准备好的bean对象就可以了。
  1. package com.example.demo;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.ApplicationContextAware;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import java.util.HashMap;
  9. import java.util.Map;
  10. @RestController
  11. public class demo implements ApplicationContextAware {
  12.     @Autowired
  13.     private LoginTypeConfig loginTypeConfig;
  14.     private static Map<String,say> res = new HashMap<>();
  15.     @Override
  16.     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  17.         loginTypeConfig.getTypes().forEach((k, v) -> {
  18.             res.put(k, (say)applicationContext.getBean(v));
  19.         });
  20.     }
  21.     @GetMapping("/test")
  22.     public say test(String type)
  23.     {
  24.         say s = res.get(type);
  25.         System.out.println(s.toString());
  26.         s.say();
  27.         return s;
  28.     }
  29. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表