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

news/2024/10/3 20:32:15

首先 yml文件中的自定义配置如下

login-type-config:types:k1: "yuheng0"k2: "yuheng1"

我们有两个对应的类,yuheng0 和 yuheng1 ,他们都实现了say接口,并且重写了say方法。下面要通过请求k1 k2 获取yuheng0 和 yuheng1类的bean对象。

注意,要记得加上Component注解 交给IOC容器管理他们

这两个类的具体内容如下

package com.example.demo;import org.springframework.stereotype.Component;@Component
public class yuheng0 implements say{public void say(){System.out.println("yuheng0");}@Overridepublic String toString() {return "k1 to string";}
}
package com.example.demo;import org.springframework.stereotype.Component;@Component
public class yuheng1 implements say{public void say(){System.out.println("yuheng1");}@Overridepublic String toString() {return "k2 to string";}
}
package com.example.demo;public interface say {void say();
}

下面是配置类,可以这么写配置来读取自定义配置的信息。这边的map是string string类型的,也就是单纯的把配置类的信息以String的形式读到map里面

package com.example.demo;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Map;@Component
@ConfigurationProperties(prefix = "login-type-config") // 注意要对应
public class LoginTypeConfig {private Map<String,String> types;public Map<String, String> getTypes() {return types;}public void setTypes(Map<String, String> types) {this.types = types;}
}

最后就是最关键的逻辑,实现ApplicationContextAware接口,他可以根据名称从ioc容器中取出对应的bean

这次我们自定义的map类型是string 和 say。根据名称拿到对应的bean对象,也就是yuheng0和yuheng1的对象。放到自定义的map里面。在请求test的时候,从map中拿出已经准备好的bean对象就可以了。

package com.example.demo;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
public class demo implements ApplicationContextAware {@Autowiredprivate LoginTypeConfig loginTypeConfig;private static Map<String,say> res = new HashMap<>();@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {loginTypeConfig.getTypes().forEach((k, v) -> {res.put(k, (say)applicationContext.getBean(v));});}@GetMapping("/test")public say test(String type){say s = res.get(type);System.out.println(s.toString());s.say();return s;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/67461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

十、特殊应用:人脸识别和神经风格转换

1、One-Shot学习(One-shot learning)人脸识别所面临的一个挑战就是需要解决一次学习问题(one-shot learning problem),这意味着在大多数人脸识别应用中,你需要通过单单一张图片或者单单一个人脸样例就能去识别这个人。而历史上,当深度学习只有一个训练样例时,它的表现并…

python高级内置函数

filter函数返回迭代器

表情包

创建于 8.1 updated on 10.3:整理博客时发现这个了,当时不敢发,现在没啥问题了吧,毕竟涉及人员都 【数据删除】 了,遂发布。 整理博客发现欧耶! https://img2024.cnblogs.com/blog/3365934/202407/3365934-20240725151423252-219730277.png 害羞 起飞呦 哒咩

VulnHub2018_DeRPnStiNK靶机渗透练习

据说该靶机有四个flag 扫描 扫描附近主机arp-scan -l扫主目录扫端口 nmap -sS -sV -n -T4 -p- 192.168.xx.xx 结果如下 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-30 19:25 CST Nmap scan report for 192.168.93.131 Host is up (0.0024s latency). Not shown: 6…

昨天放洛谷的图

因为刷不出来以及有人问所以放这了

python多进程debug

代码调试 问题阐述 最近遇到一个python debug多进程的问题 有一个进程A,这个进程会fork出8个进程B,fork join结束后,又会fork出8个进程A。 假设按时间有序,我就只想断fork出的第一个B和第一个进程A,怎么做?(breakpoint just break only once)类似于java多线程调试的意思…

一些数学知识题

欧几里得算法费马小定理 当a,p都是是质数时,a^(p-1)=1(mod p) 证明: 举个例子 a=2,p=5; 1,2,3,4 集合(1) {1,2,3,4...,(p-1)} 2,4,6,8 => %5 => 2,4,1,3 集合(2) {1a%p,2a%p,3a%p,4a%p...,(p-1)a%p} 我们发现{1,2,3,4}和{2,4,1,3}只是…

题解:洛谷P2339 [USACO04OPEN] Turning in Homework G

题目链接:洛谷P2339 [USACO04OPEN] Turning in Homework G 首先我们考虑如何处理到达给定时间后才能交作业这一限制。其实在生活中,我们一般只会考虑什么时候交作业截止 (除了某些卷王),这样我们只用考虑如何在最大结束时间之前交作业,而不是在所有作业都没开始交之前考虑…