溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何自定義bean綁定

發(fā)布時間:2022-10-24 09:48:20 來源:億速云 閱讀:139 作者:iii 欄目:開發(fā)技術

本篇內容介紹了“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;
    @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);
        }
    }

    SpringBoot如何自定義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);
        }
    }

    運行出來什么也沒

    SpringBoot如何自定義bean綁定

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

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

    運行結果

    SpringBoot如何自定義bean綁定

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

    SpringBoot如何自定義bean綁定

    這是因為prefix屬性只能用小寫,不能使用駝峰命名法,改成小寫即可

    SpringBoot如何自定義bean綁定

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

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

    @ConfigurationProperties是做具體的屬性綁定的,對應的配置文件。

    當我們使用了@EnableConfigurationProperties,且又在類總使用了@Component,就會報錯,如下

    SpringBoot如何自定義bean綁定

    這個錯誤是,找到兩個bean,一個類對應著兩個bean導致不唯一了。

    原因是:@EnableConfigurationProperties(ServerConfig.class),默認會 交給spring容器去管理,而要想讓spring去管理,首先得是一個bean對象,所就會把這個ServerConfig.class變成bean對象。我們在那個類中寫了@Component,這個注解也是說這個是一個bean對象,這樣就導致了同一個類中對應了兩個bean對象,所以產生錯誤。這兩個注解不能同時使用,一般使用@EnableConfigurationProperties更能體現(xiàn)出是哪個類受spring管且需要配置注入。

    解除@ConfigurationProperties注解警告

    SpringBoot如何自定義bean綁定

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

    解決:那就給它加上

    pom.xml加上:

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

    這樣警告就沒有了。

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

    @ConfigurationProperties的松散綁定

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

    SpringBoot如何自定義bean綁定

    在實體類中也可以識別并正常運行。

    @Value不支持寬松綁定

    SpringBoot如何自定義bean綁定

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

    小結:

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

    @Value注解不支持寬松綁定

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

    “SpringBoot如何自定義bean綁定”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

    AI