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实现 基于密度的局部离群点检测------lof算法

    Java实现 基于密度的局部离群点检测------lof算法

    这篇文章主要介绍了Java实现 基于密度的局部离群点检测------lof算法,本文通过算法概述,算法Java源码,测试结果等方面一一进行说明,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • java中out.print和out.write的方法

    java中out.print和out.write的方法

    本文用一个小例子说明java out.print和out.write的方法,大家参考使用吧
    2013-11-11
  • Java多线程Semaphore工具的使用详解

    Java多线程Semaphore工具的使用详解

    Semaphore 是一种用于控制线程并发访问数的同步工具。它通过维护一定数量的许可证来限制对共享资源的访问,许可证的数量就是可以同时访问共享资源的线程数目,需要的朋友可以参考下
    2023-05-05
  • Java源码解析之ClassLoader

    Java源码解析之ClassLoader

    在看系统启动的流程中看到了ClassLoader使用,重新温故下ClassLoader流程和原理,文中有非常详细的代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Java Set接口及常用实现类总结

    Java Set接口及常用实现类总结

    Collection的另一个子接口就是Set,他并没有我们List常用,并且自身也没有一些额外的方法,全是继承自Collection中的,因此我们还是简单总结一下,包括他的常用实现类HashSet、LinkedHashSet、TreeSet的总结
    2023-01-01
  • Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法详解与实例

    本篇文章介绍了,在java中"==" 与equals方法的使用及其实例,需要的朋友可以参考下
    2017-04-04
  • SpringBoot Loki安装简介及实战思路

    SpringBoot Loki安装简介及实战思路

    这篇文章主要为大家介绍了SpringBoot Loki安装简介及实战思路详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪的相关资料
    2022-11-11
  • Spring实战之让Bean获取Spring容器操作示例

    Spring实战之让Bean获取Spring容器操作示例

    这篇文章主要介绍了Spring实战之让Bean获取Spring容器操作,结合实例形式分析了Bean获取Spring容器的相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • Java实现用户短信验证码登录功能实例代码

    Java实现用户短信验证码登录功能实例代码

    现在不管是各类的网站,还是大小社交app,登录方式是越来越多了,但是大部分还是以短信登录为主,本文主要介绍了java短信验证码登录功能设计与实现,感兴趣的可以了解一下
    2021-11-11
  • spring boot security自定义认证的代码示例

    spring boot security自定义认证的代码示例

    这篇文章主要介绍了spring boot security自定义认证,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论