文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot如何自定义bean绑定

2023-07-04 10:55

关注

本篇内容介绍了“SpringBoot如何自定义bean绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

自定义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);    }}

SpringBoot如何自定义bean绑定

导入第三方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);    }}

运行出来什么也没

SpringBoot如何自定义bean绑定

第三方bea通过配置文件注参数

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());    }}

运行结果

SpringBoot如何自定义bean绑定

出现Prefix must be in canonical form

SpringBoot如何自定义bean绑定

这是因为prefix属性只能用小写,不能使用驼峰命名法,改成小写即可

SpringBoot如何自定义bean绑定

@EnableConfigurationProperties()和@ConfigurationProperties的区别

@EnableConfigurationProperties开启对应的属性功能,可以通过配置中的属性,让我们对应的类名来做属性注入 ,这样也可以看出有哪些类通过spring去管理

@ConfigurationProperties是做具体的属性绑定的,对应的配置文件。

当我们使用了@EnableConfigurationProperties,且又在类总使用了@Component,就会报错,如下

SpringBoot如何自定义bean绑定

这个错误是,找到两个bean,一个类对应着两个bean导致不唯一了。

原因是:@EnableConfigurationProperties(ServerConfig.class),默认会 交给spring容器去管理,而要想让spring去管理,首先得是一个bean对象,所就会把这个ServerConfig.class变成bean对象。我们在那个类中写了@Component,这个注解也是说这个是一个bean对象,这样就导致了同一个类中对应了两个bean对象,所以产生错误。这两个注解不能同时使用,一般使用@EnableConfigurationProperties更能体现出是哪个类受spring管且需要配置注入。

解除@ConfigurationProperties注解警告

SpringBoot如何自定义bean绑定

原因:springboot配置的处理器并没有配置,现在不能识别这个注解

解决:那就给它加上

pom.xml加上:

     <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>        </dependency>

这样警告就没有了。

@ConfigurationProperties可以为第三方的bean绑定属性。

@ConfigurationProperties的松散绑定

也叫宽松绑定,指的是在配置文件中的参数名任意大小写下划线或者中线,都会给你匹配出来。

SpringBoot如何自定义bean绑定

在实体类中也可以识别并正常运行。

@Value不支持宽松绑定

SpringBoot如何自定义bean绑定

@ConfigurationProperties绑定前缀命名规范(prefix):仅能使用纯小写字母、数字、下划线作为合法的字符(以后都使用小写更方便。)

小结:

@ConfigurationProperties绑定属性支持属性名宽松绑定

@Value注解不支持宽松绑定

绑定的前缀命名有规则

“SpringBoot如何自定义bean绑定”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯