springboot自定义自配置类
springboot自定义自配置类
需求:当某个类存在的时候,自动配置这个类的bean,并可将bean的属性在application.properties中配置
1、导包
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-autoconfigure -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
2、自定义start的配置文件(仿照HttpProperties)
package com.yl.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "my.properties")//将配置文件中指定前缀(my.properties)的值映射到当前类
public class MyProperties {
private MyProperties.Properties properties=new MyProperties.Properties();
public MyProperties() {
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public static class Properties{
public static final String DEFAULT_NAME;//默认值,也可以在配置文件自定义值
private String name;
private String age;
static {
DEFAULT_NAME="yl";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
}
3、配置文件注入属性值
my:
properties:
properties:
age: 18
name: yl
4、判断依据类
对应需求中的某个类,作为判断依据类,如果存在则创建这个类的bean
package com.yl.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
private String name;
private String age;
}
4、自动配置类
package com.yl.configration;
import com.yl.bean.MyClass;
import com.yl.properties.MyProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MyProperties.class)//使@ConfigurationProperties注解的类生效。
@ConditionalOnClass(MyClass.class)//当前类路径下有指定类(MyClass)的条件下启动自配置
//指定的属性是否有指定的值,当matchIfMissing为true时,配置文件缺少value或name对应的属性值也会注入成功
@ConditionalOnProperty(prefix = "my.properties",value = "enabled",matchIfMissing = true)
public class MyAutoConfigration {
private MyProperties.Properties properties;
public MyAutoConfigration(MyProperties properties) {
this.properties = properties.getProperties();
}
@Bean
@ConditionalOnMissingBean(MyClass.class)//当容器里没有指定bean(MyClass)时配置bean
public MyClass person(){
MyClass myClass =new MyClass();
myClass.setName(properties.getName());
myClass.setAge(properties.getAge());
return myClass;
}
}
5、注册自动配置类
在resource下创建META-INF文件夹,在此文件夹下创建spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.yl.configration.MyAutoConfigration # 自动配置类全限定类名
6、测试
package com.yl.controller;
import com.yl.bean.MyClass;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
private MyClass myClass;
@RequestMapping("/testAutoConfigration")
@ResponseBody
public MyClass testAutoConfigration(){
return myClass;
}
}
参考资料:https://segmentfault.com/a/1190000020264520?utm_source=tag-newest
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!