本篇内容介绍了“SpringBoot如何自定义bean绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自定义bean绑定在配置文件中写入s
本篇内容介绍了“SpringBoot如何自定义bean绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
在配置文件中写入
servers:
ipAddress: 192.158.0.1
port: 1234
detail: zhangsan
定义一个实体类对象去接受这些属性
import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Data //lombok省去get/set/toString@Component //交给spring容器管理@ConfigurationProperties(prefix = "servers") //配置文件的位置,对应的属性注入public class ServerConfig { private String ipAddress; private int port; private String detail;}
启动类下的
import com.pojo.ServerConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class Springboot11ConfigurationApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(Springboot11ConfigurationApplication.class, args); ServerConfig bean = run.getBean(ServerConfig.class); System.out.println(bean); }}
注入方式有许多,可以导入在写一个配置类,然后加上@Bean即可,启动类中的@SpringBootApplication本身就是一个配置类。所以直接在这写也可以。
导入druid坐标
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.12</version> </dependency>
启动类
@SpringBootApplicationpublic class Springboot11ConfigurationApplication { @Bean//注入 public DruidDataSource druidDataSource(){ DruidDataSource ds=new DruidDataSource(); return ds; } public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(Springboot11ConfigurationApplication.class, args); ServerConfig bean = run.getBean(ServerConfig.class); System.out.println(bean); DruidDataSource dds = run.getBean(DruidDataSource.class); System.out.println(dds); }}
运行出来什么也没
application.yml下
datasource:
driverClassName: "com.mysql.jdbc.driver.zhkc"
username: "张三"
passWord: kczh
启动类下
package com;import com.alibaba.druid.pool.DruidDataSource;import com.pojo.ServerConfig;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.Bean;@SpringBootApplicationpublic class Springboot11ConfigurationApplication { @Bean @ConfigurationProperties(prefix = "datasource") public DruidDataSource druidDataSource(){ DruidDataSource ds=new DruidDataSource(); return ds; } public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(Springboot11ConfigurationApplication.class, args);// ServerConfig bean = run.getBean(ServerConfig.class);// System.out.println(bean); DruidDataSource dds = run.getBean(DruidDataSource.class); System.out.println(dds.getDriverClassName()); System.out.println(dds.getUsername()); System.out.println(dds.getPassword()); }}
运行结果
这是因为prefix属性只能用小写,不能使用驼峰命名法,改成小写即可
@EnableConfigurationProperties开启对应的属性功能,可以通过配置中的属性,让我们对应的类名来做属性注入 ,这样也可以看出有哪些类通过spring去管理
@ConfigurationProperties是做具体的属性绑定的,对应的配置文件。
当我们使用了@EnableConfigurationProperties,且又在类总使用了@Component,就会报错,如下
这个错误是,找到两个bean,一个类对应着两个bean导致不唯一了。
原因是:@EnableConfigurationProperties(ServerConfig.class),默认会 交给spring容器去管理,而要想让spring去管理,首先得是一个bean对象,所就会把这个ServerConfig.class变成bean对象。我们在那个类中写了@Component,这个注解也是说这个是一个bean对象,这样就导致了同一个类中对应了两个bean对象,所以产生错误。这两个注解不能同时使用,一般使用@EnableConfigurationProperties更能体现出是哪个类受spring管且需要配置注入。
原因:springboot配置的处理器并没有配置,现在不能识别这个注解
解决:那就给它加上
pom.xml加上:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
这样警告就没有了。
@ConfigurationProperties可以为第三方的bean绑定属性。
也叫宽松绑定,指的是在配置文件中的参数名任意大小写下划线或者中线,都会给你匹配出来。
在实体类中也可以识别并正常运行。
@Value不支持宽松绑定
@ConfigurationProperties绑定前缀命名规范(prefix):仅能使用纯小写字母、数字、下划线作为合法的字符(以后都使用小写更方便。)
小结:
@ConfigurationProperties绑定属性支持属性名宽松绑定
@Value注解不支持宽松绑定
绑定的前缀命名有规则
“SpringBoot如何自定义bean绑定”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
--结束END--
本文标题: SpringBoot如何自定义bean绑定
本文链接: https://lsjlt.com/news/344359.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0