欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot自定義bean綁定實(shí)現(xiàn)

 更新時(shí)間:2022年10月22日 15:39:17   作者:執(zhí)久呀  
這篇文章主要介紹了SpringBoot自定義bean綁定,最常見的配置綁定的場景,是在自定義的bean中通過@Value注解將某個(gè)屬性和對(duì)應(yīng)的配置綁定

自定義bean綁定

在配置文件中寫入

servers:
 ipAddress: 192.158.0.1
 port: 1234
 detail: zhangsan

定義一個(gè)實(shí)體類對(duì)象去接受這些屬性

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") //配置文件的位置,對(duì)應(yīng)的屬性注入
public class ServerConfig {
    private String ipAddress;
    private int port;
    private String detail;
}

啟動(dòng)類下的

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

導(dǎo)入第三方bean

注入方式有許多,可以導(dǎo)入在寫一個(gè)配置類,然后加上@Bean即可,啟動(dòng)類中的@SpringBootApplication本身就是一個(gè)配置類。所以直接在這寫也可以。

導(dǎo)入druid坐標(biāo)

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

啟動(dòng)類

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

運(yùn)行出來什么也沒

第三方bea通過配置文件注參數(shù)

application.yml下

datasource:
 driverClassName: "com.mysql.jdbc.driver.zhkc"
 username: "張三"
 password: kczh

啟動(dòng)類下

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

運(yùn)行結(jié)果

出現(xiàn)Prefix must be in canonical form

這是因?yàn)閜refix屬性只能用小寫,不能使用駝峰命名法,改成小寫即可

@EnableConfigurationProperties()和@ConfigurationProperties的區(qū)別

@EnableConfigurationProperties開啟對(duì)應(yīng)的屬性功能,可以通過配置中的屬性,讓我們對(duì)應(yīng)的類名來做屬性注入 ,這樣也可以看出有哪些類通過spring去管理

@ConfigurationProperties是做具體的屬性綁定的,對(duì)應(yīng)的配置文件。

當(dāng)我們使用了@EnableConfigurationProperties,且又在類總使用了@Component,就會(huì)報(bào)錯(cuò),如下

這個(gè)錯(cuò)誤是,找到兩個(gè)bean,一個(gè)類對(duì)應(yīng)著兩個(gè)bean導(dǎo)致不唯一了。

原因是:@EnableConfigurationProperties(ServerConfig.class),默認(rèn)會(huì) 交給spring容器去管理,而要想讓spring去管理,首先得是一個(gè)bean對(duì)象,所就會(huì)把這個(gè)ServerConfig.class變成bean對(duì)象。我們?cè)谀莻€(gè)類中寫了@Component,這個(gè)注解也是說這個(gè)是一個(gè)bean對(duì)象,這樣就導(dǎo)致了同一個(gè)類中對(duì)應(yīng)了兩個(gè)bean對(duì)象,所以產(chǎn)生錯(cuò)誤。這兩個(gè)注解不能同時(shí)使用,一般使用@EnableConfigurationProperties更能體現(xiàn)出是哪個(gè)類受spring管且需要配置注入。

解除@ConfigurationProperties注解警告

原因:springboot配置的處理器并沒有配置,現(xiàn)在不能識(shí)別這個(gè)注解

解決:那就給它加上

pom.xml加上:

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

這樣警告就沒有了。

@ConfigurationProperties可以為第三方的bean綁定屬性。

@ConfigurationProperties的松散綁定

也叫寬松綁定,指的是在配置文件中的參數(shù)名任意大小寫下劃線或者中線,都會(huì)給你匹配出來。

在實(shí)體類中也可以識(shí)別并正常運(yùn)行。

@Value不支持寬松綁定

@ConfigurationProperties綁定前綴命名規(guī)范(prefix):僅能使用純小寫字母、數(shù)字、下劃線作為合法的字符(以后都使用小寫更方便。)

小結(jié):

@ConfigurationProperties綁定屬性支持屬性名寬松綁定

@Value注解不支持寬松綁定

綁定的前綴命名有規(guī)則

到此這篇關(guān)于SpringBoot自定義bean綁定實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot bean綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測------lof算法

    Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測------lof算法

    這篇文章主要介紹了Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測------lof算法,本文通過算法概述,算法Java源碼,測試結(jié)果等方面一一進(jìn)行說明,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • java中out.print和out.write的方法

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

    本文用一個(gè)小例子說明java out.print和out.write的方法,大家參考使用吧
    2013-11-11
  • Java多線程Semaphore工具的使用詳解

    Java多線程Semaphore工具的使用詳解

    Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護(hù)一定數(shù)量的許可證來限制對(duì)共享資源的訪問,許可證的數(shù)量就是可以同時(shí)訪問共享資源的線程數(shù)目,需要的朋友可以參考下
    2023-05-05
  • Java源碼解析之ClassLoader

    Java源碼解析之ClassLoader

    在看系統(tǒng)啟動(dòng)的流程中看到了ClassLoader使用,重新溫故下ClassLoader流程和原理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java Set接口及常用實(shí)現(xiàn)類總結(jié)

    Java Set接口及常用實(shí)現(xiàn)類總結(jié)

    Collection的另一個(gè)子接口就是Set,他并沒有我們List常用,并且自身也沒有一些額外的方法,全是繼承自Collection中的,因此我們還是簡單總結(jié)一下,包括他的常用實(shí)現(xiàn)類HashSet、LinkedHashSet、TreeSet的總結(jié)
    2023-01-01
  • Java中的== 和equals()方法詳解與實(shí)例

    Java中的== 和equals()方法詳解與實(shí)例

    本篇文章介紹了,在java中"==" 與equals方法的使用及其實(shí)例,需要的朋友可以參考下
    2017-04-04
  • SpringBoot?Loki安裝簡介及實(shí)戰(zhàn)思路

    SpringBoot?Loki安裝簡介及實(shí)戰(zhàn)思路

    這篇文章主要為大家介紹了SpringBoot?Loki安裝簡介及實(shí)戰(zhàn)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪的相關(guān)資料
    2022-11-11
  • Spring實(shí)戰(zhàn)之讓Bean獲取Spring容器操作示例

    Spring實(shí)戰(zhàn)之讓Bean獲取Spring容器操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之讓Bean獲取Spring容器操作,結(jié)合實(shí)例形式分析了Bean獲取Spring容器的相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Java實(shí)現(xiàn)用戶短信驗(yàn)證碼登錄功能實(shí)例代碼

    Java實(shí)現(xiàn)用戶短信驗(yàn)證碼登錄功能實(shí)例代碼

    現(xiàn)在不管是各類的網(wǎng)站,還是大小社交app,登錄方式是越來越多了,但是大部分還是以短信登錄為主,本文主要介紹了java短信驗(yàn)證碼登錄功能設(shè)計(jì)與實(shí)現(xiàn),感興趣的可以了解一下
    2021-11-11
  • spring boot security自定義認(rèn)證的代碼示例

    spring boot security自定義認(rèn)證的代碼示例

    這篇文章主要介紹了spring boot security自定義認(rèn)證,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論