SpringBoot自定义bean绑定实现

 更新时间:2022年10月22日 15:39:17   作者:执久呀  
这篇文章主要介绍了SpringBoot自定义bean绑定,最常见的配置绑定的场景,是在自定义的bean中通过@Value注解将某个属性和对应的配置绑定

自定义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;
@SpringBootApplication
public 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

注入方式有许多,可以导入在写一个配置类,然后加上@Bean即可,启动类中的@SpringBootApplication本身就是一个配置类。所以直接在这写也可以。

导入druid坐标

      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.12</version>
        </dependency>

启动类

@SpringBootApplication
public 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);
    }
}

运行出来什么也没

第三方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;
@SpringBootApplication
public 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 must be in canonical form

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

@EnableConfigurationProperties()和@ConfigurationProperties的区别

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

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

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

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

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

解除@ConfigurationProperties注解警告

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

解决:那就给它加上

pom.xml加上:

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

这样警告就没有了。

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

@ConfigurationProperties的松散绑定

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

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

@Value不支持宽松绑定

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

小结:

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

@Value注解不支持宽松绑定

绑定的前缀命名有规则

到此这篇关于SpringBoot自定义bean绑定实现的文章就介绍到这了,更多相关SpringBoot bean绑定内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用java + selenium + OpenCV破解腾讯防水墙滑动验证码功能

    使用java + selenium + OpenCV破解腾讯防水墙滑动验证码功能

    这篇文章主要介绍了使用java + selenium + OpenCV破解腾讯防水墙滑动验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 用3个实例从原理到实战讲清楚Log4j史诗级漏洞

    用3个实例从原理到实战讲清楚Log4j史诗级漏洞

    最近应该很多人都在关注着一个漏洞Apache Log4j 2远程代码执行,该漏洞一旦被攻击者利用会造成严重危害,这篇文章主要给大家介绍了关于如何用3个实例从原理到实战讲清楚Log4j史诗级漏洞的相关资料,需要的朋友可以参考下
    2021-12-12
  • 详解jvm双亲委派机制

    详解jvm双亲委派机制

    双亲委派机制保证了核心类的安全,确保不会被修改,也保证了不会加载到重复的字节码文件,这篇文章主要介绍了jvm双亲委派机制详解,需要的朋友可以参考下
    2022-11-11
  • 使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤

    使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤

    这篇文章主要介绍了使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • JVM GC 垃圾收集梳理总结

    JVM GC 垃圾收集梳理总结

    这篇文章主要介绍了JVM GC 垃圾收集梳理总结,GC是一种自动的存储管理机制。当一些被占用的内存不再需要时,就应该予以释放,这种存储资源管理,称为垃圾回收
    2022-07-07
  • Java中的锁与锁的状态升级详细解读

    Java中的锁与锁的状态升级详细解读

    这篇文章主要介绍了Java中的锁与锁的状态升级详细解读,Java 1.6以后官方针对锁的优化,主要是增加了两种新的锁:偏向锁和轻量级锁,再加上本身重量级锁,那么锁基本上可以大致分为这三种,它们之间的区别主要是体现在等待时间上面,需要的朋友可以参考下
    2024-01-01
  • Java异步调用转同步方法实例详解

    Java异步调用转同步方法实例详解

    这篇文章主要介绍了Java异步调用转同步方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 分析讲解SpringMVC注解配置如何实现

    分析讲解SpringMVC注解配置如何实现

    这篇文章主要介绍了本文要介绍用注解方式代替web.xml与SpringMVC的配置文件,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • SpringBoot集成FastDFS+Nginx整合基于Token的防盗链的方法

    SpringBoot集成FastDFS+Nginx整合基于Token的防盗链的方法

    这篇文章主要介绍了SpringBoot集成FastDFS+Nginx整合基于Token的防盗链的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Java数据结构之线段树中的懒操作详解

    Java数据结构之线段树中的懒操作详解

    对于线段树,若要求对区间中的所有点都进行更新,可以引入懒操作。懒操作包括区间更新和区间查询操作。本文将通过一个示例和大家详细聊聊线段树中的懒操作,需要的可以参考一下
    2022-10-10

最新评论