最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot @Import與@Conditional注解使用詳解

 更新時(shí)間:2022年10月13日 16:21:47   作者:一根頭發(fā)學(xué)一年  
在了解spring boot自動(dòng)配置原理前,再來了解下兩個(gè)注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean

說明:基于atguigu學(xué)習(xí)筆記。

在了解spring boot自動(dòng)配置原理前,再來了解下兩個(gè)注解@Import注解和@Conditional注解。

@Import

@Import注解主要用于導(dǎo)入某些特殊的Bean,這些特殊的Bean和Bean Definitaion 有關(guān)。

主要用于導(dǎo)入@Configuration 類,ImportSelector和ImportBeanDefinitionRegistrar接口的實(shí)現(xiàn)類。

@Import可以添加在@SpringBootApplication(啟動(dòng)類)、@Configuration(配置類)、@Component(組件類)對(duì)應(yīng)的類上。

一般在Spring boot 中配置都一般都是自動(dòng)導(dǎo)入的,所以我們不需要使用@Import,但是如果你你想導(dǎo)入的配置類不在自動(dòng)掃包路徑,那么該配置類就需要使用@Import導(dǎo)入,尤其是第三方j(luò)ar包的配置類都需要借助@Import來導(dǎo)入。

這里我們首先熟悉基本語法,具體的用法后面再學(xué)。

示例:

還使用上一章里項(xiàng)目示例:@Configuration注解和@Bean注解

使用 @Import導(dǎo)入我們需要的類,這里導(dǎo)入我們自己創(chuàng)建的類和第三方logback jar包里的類,如下:

config類:

package com.example.ethan.config;
import ch.qos.logback.core.db.DBHelper;
import com.example.ethan.bean.Dept;
import com.example.ethan.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods=true)
public class ConfigDemo {
    @Bean
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user組件依賴了Dept組件
        zhangsan.setDept(rd());
        return zhangsan;
    }
    @Bean("my rd")
    public Dept rd(){
        return new Dept("研發(fā)部");
    }
}

主程序

package com.example.ethan;
import ch.qos.logback.core.db.DBHelper;
import com.example.ethan.bean.Dept;
import com.example.ethan.bean.User;
import com.example.ethan.config.ConfigDemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class EthanApplication {
    public static void main(String[] args) {
        // 返回ioc容器
        ConfigurableApplicationContext run = SpringApplication.run(EthanApplication.class, args);
        // 只查看User類型的Bean
        String[] beanDefinitionNames = run.getBeanNamesForType(User.class);
        System.out.println("========================");
        for (String name : beanDefinitionNames) {
            System.out.println(name);
        }
        DBHelper bean = run.getBean(DBHelper.class);
        System.out.println(bean);
        // com.example.ethan.bean.User
        //user01
        //ch.qos.logback.core.db.DBHelper@67207d8a
    }
}

可以看到,使用 @Import注解,會(huì)給容器中自動(dòng)創(chuàng)建出這兩個(gè)類型的Bean,且Bean的名字是全類名。

@Conditional

滿足Conditional指定的條件,則進(jìn)行注入指定Bean。

@Conditional是一個(gè)根注解,下面還派生了許多其他注解

@Conditional注解可以加在方法上也可以加在類上。當(dāng)加在類上,當(dāng)條件不成立,類中所有代碼都不執(zhí)行,如果加在方法上,則只這個(gè)方法不執(zhí)行。

下面以@ConditionalOnBean(條件是判斷是否含有某個(gè)Bean)為例,演示代碼如下:

首先放在方法上:

package com.example.ethan.config;
import com.example.ethan.bean.Dept;
import com.example.ethan.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods=true)
public class ConfigDemo {
    @Bean("my rd")
    public Dept rd(){
        return new Dept("研發(fā)部");
    }
    @Bean
    @ConditionalOnBean(name = "my rd")
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user組件依賴了Dept組件
        zhangsan.setDept(rd());
        return zhangsan;
    }
}

主程序:

package com.example.ethan;
import ch.qos.logback.core.db.DBHelper;
import com.example.ethan.bean.Dept;
import com.example.ethan.bean.User;
import com.example.ethan.config.ConfigDemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class EthanApplication {
    public static void main(String[] args) {
        // 返回ioc容器
        ConfigurableApplicationContext run = SpringApplication.run(EthanApplication.class, args);
        boolean my_rd = run.containsBean("my rd");
        System.out.println("容器中含有my rd這個(gè)Bean:" + my_rd);
        boolean user01 = run.containsBean("user01");
        System.out.println("容器中含有user01這個(gè)Bean:" + user01);
    }
}

這時(shí)候兩個(gè)好結(jié)果都是true,因?yàn)榘凑枕樞蜃⑷隑ean時(shí),先注入了"my rd"這個(gè)Bean到容器,然后在注入user01時(shí),檢查容器中含有my rd"這個(gè)Bean,就把user01也注入了。

如果把條件里name改為不存在的如"my rd02",那么入user01就不會(huì)注入容器。

下面把注解放到類上:

package com.example.ethan.config;
import com.example.ethan.bean.Dept;
import com.example.ethan.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods=true)
@ConditionalOnBean(name = "my rd")
public class ConfigDemo {
    @Bean("my rd")
    public Dept rd(){
        return new Dept("研發(fā)部");
    }
    @Bean
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user組件依賴了Dept組件
        zhangsan.setDept(rd());
        return zhangsan;
    }
}

這時(shí)候兩個(gè)Bean都不會(huì)注入容器,因?yàn)樵趫?zhí)行這個(gè)類時(shí)檢查條件不成立。

這里對(duì)@ConditionalOnBean有個(gè)初步了解,具體何種用法類似,可舉一反三。

參考:

SpringBoot之@Import注解使用

到此這篇關(guān)于SpringBoot @Import與@Conditional注解使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot @Import與@Conditional內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Gateway網(wǎng)關(guān)自定義攔截器的不可重復(fù)讀取數(shù)據(jù)問題

    Gateway網(wǎng)關(guān)自定義攔截器的不可重復(fù)讀取數(shù)據(jù)問題

    這篇文章主要介紹了Gateway網(wǎng)關(guān)自定義攔截器的不可重復(fù)讀取數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析

    Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析

    在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會(huì)用到Filter和Interceptor,這篇文章主要介紹了Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系?,需要的朋友可以參考下
    2022-10-10
  • 圖解Java排序算法之3種簡單排序

    圖解Java排序算法之3種簡單排序

    這篇文章主要為大家詳細(xì)介紹了Java排序算法之3種簡單排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Spring中@Configuration注解和@Component注解的區(qū)別詳解

    Spring中@Configuration注解和@Component注解的區(qū)別詳解

    這篇文章主要介紹了Spring中@Configuration注解和@Component注解的區(qū)別詳解,@Configuration 和 @Component 到底有何區(qū)別呢?我先通過如下一個(gè)案例,在不分析源碼的情況下,小伙伴們先來直觀感受一下這兩個(gè)之間的區(qū)別,需要的朋友可以參考下
    2023-09-09
  • Java多線程案例實(shí)戰(zhàn)之定時(shí)器的實(shí)現(xiàn)

    Java多線程案例實(shí)戰(zhàn)之定時(shí)器的實(shí)現(xiàn)

    在Java中可以使用多線程和定時(shí)器來實(shí)現(xiàn)定時(shí)任務(wù),下面這篇文章主要給大家介紹了關(guān)于Java多線程案例之定時(shí)器實(shí)現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 淺談一下Java中枚舉的用法

    淺談一下Java中枚舉的用法

    這篇文章主要介紹了淺談一下Java中枚舉的用法,枚舉是一個(gè)被命名的整型常數(shù)的集合,用于聲明一組帶標(biāo)識(shí)符的常數(shù),當(dāng)一個(gè)變量有幾種固定可能的取值時(shí),就可以將它定義為枚舉類型,需要的朋友可以參考下
    2023-04-04
  • 詳解Java數(shù)字簽名提供XML安全

    詳解Java數(shù)字簽名提供XML安全

    在本篇文章中我們給大家整理了關(guān)于Java數(shù)字簽名提供XML安全的知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • java實(shí)現(xiàn)大文本文件拆分

    java實(shí)現(xiàn)大文本文件拆分

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)大文本文件拆分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Java實(shí)現(xiàn)布隆過濾器的示例詳解

    Java實(shí)現(xiàn)布隆過濾器的示例詳解

    布隆過濾器(Bloom?Filter)是1970年由布隆提出來的,實(shí)際上是由一個(gè)很長的二進(jìn)制數(shù)組+一系列hash算法映射函數(shù),用于判斷一個(gè)元素是否存在于集合中。本文主要介紹了Java實(shí)現(xiàn)布隆過濾器的示例代碼,希望對(duì)大家有所幫助
    2023-03-03
  • SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法

    SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法

    這篇文章主要介紹了SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法,Spring對(duì)數(shù)據(jù)庫的操作在jdbc上s面做了深層次的封裝,使用spring的注入功能,可以把DataSource注冊(cè)到JdbcTemplate之中。下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-02-02

最新評(píng)論

宜兰县| 新晃| 民勤县| 永仁县| 丹凤县| 巴林左旗| 南昌县| 曲周县| 石泉县| 吴桥县| 宣城市| 阜南县| 根河市| 乐亭县| 巧家县| 泸溪县| 肇源县| 贡山| 炉霍县| 密山市| 临泽县| 溧阳市| 石河子市| 柳江县| 沁水县| 信丰县| 通道| 京山县| 兖州市| 泰兴市| 贵港市| 格尔木市| 赤壁市| 漳浦县| 林州市| 武乡县| 通河县| 资溪县| 保康县| 温泉县| 科技|