在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析Spring中最常用的擴(kuò)展點(diǎn)(中)

jf_78858299 ? 來(lái)源:蘇三說(shuō)技術(shù) ? 作者:蘇三說(shuō)技術(shù) ? 2023-02-15 16:06 ? 次閱讀

4.類型轉(zhuǎn)換器

spring目前支持3中類型轉(zhuǎn)換器:

  • Converter:將 S 類型對(duì)象轉(zhuǎn)為 T 類型對(duì)象
  • ConverterFactory:將 S 類型對(duì)象轉(zhuǎn)為 R 類型及子類對(duì)象
  • GenericConverter:它支持多個(gè)source和目標(biāo)類型的轉(zhuǎn)化,同時(shí)還提供了source和目標(biāo)類型的上下文,這個(gè)上下文能讓你實(shí)現(xiàn)基于屬性上的注解或信息來(lái)進(jìn)行類型轉(zhuǎn)換。

這3種類型轉(zhuǎn)換器使用的場(chǎng)景不一樣,我們以Converter例。假如:接口中接收參數(shù)的實(shí)體對(duì)象中,有個(gè)字段的類型是Date,但是實(shí)際傳參的是字符串類型:2021-01-03 10:20:15,要如何處理呢?

第一步,定義一個(gè)實(shí)體User:

@Data
public class User {

    private Long id;
    private String name;
    private Date registerDate;
}

第二步,實(shí)現(xiàn)Converter接口:

public class DateConverter implements Converter {

    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public Date convert(String source) {
        if (source != null && !"".equals(source)) {
            try {
                simpleDateFormat.parse(source);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

第三步,將新定義的類型轉(zhuǎn)換器注入到spring容器中:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new DateConverter());
    }
}

第四步,調(diào)用接口

@RequestMapping("/user")
@RestController
public class UserController {

    @RequestMapping("/save")
    public String save(@RequestBody User user) {
        return "success";
    }
}

請(qǐng)求接口時(shí)User對(duì)象中registerDate字段會(huì)被自動(dòng)轉(zhuǎn)換成Date類型。

5.導(dǎo)入配置

有時(shí)我們需要在某個(gè)配置類中引入另外一些類,被引入的類也加到spring容器中。這時(shí)可以使用@Import注解完成這個(gè)功能。

如果你看過(guò)它的源碼會(huì)發(fā)現(xiàn),引入的類支持三種不同類型。

但是我認(rèn)為最好將普通類和@Configuration注解的配置類分開(kāi)講解,所以列了四種不同類型:

圖片

5.1 普通類

這種引入方式是最簡(jiǎn)單的,被引入的類會(huì)被實(shí)例化bean對(duì)象。

public class A {
}

@Import(A.class)
@Configuration
public class TestConfiguration {
}

通過(guò)@Import注解引入A類,spring就能自動(dòng)實(shí)例化A對(duì)象,然后在需要使用的地方通過(guò)@Autowired注解注入即可:

@Autowired
private A a;

是不是挺讓人意外的?不用加@Bean注解也能實(shí)例化bean。

5.2 配置類

這種引入方式是最復(fù)雜的,因?yàn)?code>@Configuration注解還支持多種組合注解,比如:

  • @Import
  • @ImportResource
  • @PropertySource等。
public class A {
}

public class B {
}

@Import(B.class)
@Configuration
public class AConfiguration {

    @Bean
    public A a() {
        return new A();
    }
}

@Import(AConfiguration.class)
@Configuration
public class TestConfiguration {
}

通過(guò)@Import注解引入@Configuration注解的配置類,會(huì)把該配置類相關(guān)@Import@ImportResource@PropertySource等注解引入的類進(jìn)行遞歸,一次性全部引入。

5.3 ImportSelector

這種引入方式需要實(shí)現(xiàn)ImportSelector接口:

public class AImportSelector implements ImportSelector {

private static final String CLASS_NAME = "com.sue.cache.service.test13.A";
    
 public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{CLASS_NAME};
    }
}

@Import(AImportSelector.class)
@Configuration
public class TestConfiguration {
}

這種方式的好處是selectImports方法返回的是數(shù)組,意味著可以同時(shí)引入多個(gè)類,還是非常方便的。

5.4 ImportBeanDefinitionRegistrar

這種引入方式需要實(shí)現(xiàn)ImportBeanDefinitionRegistrar接口:

public class AImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(A.class);
        registry.registerBeanDefinition("a", rootBeanDefinition);
    }
}

@Import(AImportBeanDefinitionRegistrar.class)
@Configuration
public class TestConfiguration {
}

這種方式是最靈活的,能在registerBeanDefinitions方法中獲取到BeanDefinitionRegistry容器注冊(cè)對(duì)象,可以手動(dòng)控制BeanDefinition的創(chuàng)建和注冊(cè)。

6.項(xiàng)目啟動(dòng)時(shí)

有時(shí)候我們需要在項(xiàng)目啟動(dòng)時(shí)定制化一些附加功能,比如:加載一些系統(tǒng)參數(shù)、完成初始化、預(yù)熱本地緩存等,該怎么辦呢?

好消息是springboot提供了:

  • CommandLineRunner
  • ApplicationRunner

這兩個(gè)接口幫助我們實(shí)現(xiàn)以上需求。

它們的用法還是挺簡(jiǎn)單的,以ApplicationRunner接口為例:

@Component
public class TestRunner implements ApplicationRunner {

    @Autowired
    private LoadDataService loadDataService;

    public void run(ApplicationArguments args) throws Exception {
        loadDataService.load();
    }
}

實(shí)現(xiàn)ApplicationRunner接口,重寫(xiě)run方法,在該方法中實(shí)現(xiàn)自己定制化需求。

如果項(xiàng)目中有多個(gè)類實(shí)現(xiàn)了ApplicationRunner接口,他們的執(zhí)行順序要怎么指定呢?

答案是使用@Order(n)注解,n的值越小越先執(zhí)行。當(dāng)然也可以通過(guò)@Priority注解指定順序。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14398
  • AOP
    AOP
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    11124
  • IOC
    IOC
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    10148
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Spring框架的設(shè)計(jì)理念

    Spring作為現(xiàn)在最優(yōu)秀的框架之一,已被廣泛的使用,51CTO也曾經(jīng)針對(duì)Spring框架的hqC應(yīng)用做過(guò)報(bào)道。本文將從另外一個(gè)視角試圖剖析Sp
    發(fā)表于 07-15 08:17

    電路中最常見(jiàn)到的電容使用方法

    基于電容常用功能,詳細(xì)介紹各功能應(yīng)用電路中最常見(jiàn)到的電容使用方法
    發(fā)表于 03-17 08:08

    請(qǐng)問(wèn)射擊探測(cè)器中最常用的口徑是什么?

    射擊探測(cè)器中最常用的口徑是什么?
    發(fā)表于 04-12 06:56

    開(kāi)關(guān)電源中最常用的電阻有哪些呢

    一 電阻1.開(kāi)關(guān)電源中最常用的電阻有貼片電阻、插件色環(huán)電阻、壓敏電阻、熱敏電阻等。2.貼片電阻2.1 貼片電阻:主要按封裝和功率來(lái)分,常用的有0402 1/16W; 0603 1/10W; 0805
    發(fā)表于 12-29 06:14

    單片機(jī)系統(tǒng)中最常用的三種通信協(xié)議是什么?

    單片機(jī)系統(tǒng)中最常用的三種通信協(xié)議是什么?
    發(fā)表于 02-17 06:03

    EMC問(wèn)題中最常用的手段RC濾波詳細(xì)資料說(shuō)明

    讓我們一起來(lái)看看處理 EMC 問(wèn)題中最常用的手段 -RC 濾波。本文介紹了濾波的概念,并詳細(xì)說(shuō)明了電阻 - 電容(RC)低通濾波器的用途和特性。
    發(fā)表于 12-25 07:08 ?8次下載
    EMC問(wèn)題<b class='flag-5'>中最常用</b>的手段RC濾波詳細(xì)資料說(shuō)明

    聯(lián)網(wǎng)應(yīng)用中最常用的傳感器是什么?

    環(huán)境、運(yùn)動(dòng)、光電/圖像和健康監(jiān)測(cè)傳感器是物聯(lián)網(wǎng)應(yīng)用中最常用的傳感器類型
    的頭像 發(fā)表于 08-16 11:26 ?1040次閱讀

    Spring中最常用的11個(gè)擴(kuò)展點(diǎn)

    除此之外,我們?cè)谑褂?b class='flag-5'>spring的過(guò)程,有沒(méi)有發(fā)現(xiàn)它的擴(kuò)展能力非常強(qiáng)。由于這個(gè)優(yōu)勢(shì)的存在,讓spring擁有強(qiáng)大的包容能力,讓很多第三方應(yīng)用能夠輕松投入
    的頭像 發(fā)表于 01-11 10:31 ?958次閱讀

    剖析Spring中最常用擴(kuò)展點(diǎn)(上)

    我們一說(shuō)到spring,可能第一個(gè)想到的是 `IOC`(控制反轉(zhuǎn)) 和 `AOP`(面向切面編程)。 沒(méi)錯(cuò),它們是spring的基石,得益于它們的優(yōu)秀設(shè)計(jì),使得spring能夠從眾多優(yōu)秀框架
    的頭像 發(fā)表于 02-15 16:06 ?803次閱讀
    <b class='flag-5'>剖析</b><b class='flag-5'>Spring</b><b class='flag-5'>中最常用</b>的<b class='flag-5'>擴(kuò)展</b><b class='flag-5'>點(diǎn)</b>(上)

    剖析Spring中最常用擴(kuò)展點(diǎn)(下)

    我們一說(shuō)到spring,可能第一個(gè)想到的是 `IOC`(控制反轉(zhuǎn)) 和 `AOP`(面向切面編程)。 沒(méi)錯(cuò),它們是spring的基石,得益于它們的優(yōu)秀設(shè)計(jì),使得spring能夠從眾多優(yōu)秀框架
    的頭像 發(fā)表于 02-15 16:07 ?518次閱讀

    電子線路中最常用的元器件在射頻電路又會(huì)是什么情況呢?

    電阻,電容和電感是電子線路中最常用的元器件,在低頻電子線路或者直流電路,這些元器件的特性很一致。
    的頭像 發(fā)表于 02-20 09:09 ?1251次閱讀

    基于spring的SPI擴(kuò)展機(jī)制是如何實(shí)現(xiàn)的?

    基本上,你一說(shuō)是基于 spring 的 SPI 擴(kuò)展機(jī)制,再把spring.factories文件和EnableAutoConfiguration提一下,那么這個(gè)問(wèn)題就答的八九不離十了。
    的頭像 發(fā)表于 03-07 09:17 ?1106次閱讀

    Spring11個(gè)最常用擴(kuò)展點(diǎn)分享1

    在使用spring的過(guò)程,我們有沒(méi)有發(fā)現(xiàn)它的擴(kuò)展能力很強(qiáng)呢?由于這個(gè)優(yōu)勢(shì)的存在,使得spring具有很強(qiáng)的包容性,所以很多第三方應(yīng)用或者框架可以很容易的投入到
    的頭像 發(fā)表于 05-11 10:48 ?599次閱讀

    Spring11個(gè)最常用擴(kuò)展點(diǎn)分享2

    在使用spring的過(guò)程,我們有沒(méi)有發(fā)現(xiàn)它的擴(kuò)展能力很強(qiáng)呢?由于這個(gè)優(yōu)勢(shì)的存在,使得spring具有很強(qiáng)的包容性,所以很多第三方應(yīng)用或者框架可以很容易的投入到
    的頭像 發(fā)表于 05-11 10:48 ?434次閱讀

    在SIEMENSI工業(yè)通訊中最常用的串口介紹

    在SIEMENSI工業(yè)通訊最常用的是串口;Profibus;MPI;以太網(wǎng)通訊,在下表中分別對(duì)其最大通訊距離進(jìn)行描述。
    的頭像 發(fā)表于 09-06 16:16 ?1020次閱讀
    主站蜘蛛池模板: 又粗又硬又爽又黄毛片 | 亚洲成a人片在线观看www | 国产一区二区三区在线观看视频 | aa视频在线观看 | 1024手机免费看 | 亚洲一区高清 | 不卡一级毛片免费高清 | 久久综合色综合 | 夜夜夜夜爽 | 一本大道加勒比久久综合 | 免费免播放器在线视频观看 | 亚洲www.| 在线视频 亚洲 | 日本口工福利漫画无遮挡 | 婷婷五月色综合香五月 | 亚洲68283精品人体 | 夜夜草天天干 | 天堂在线最新版在线www | 伊人久久大香线蕉综合亚洲 | 日本黄色片在线播放 | 欧美特黄一免在线观看 | 精品三级三级三级三级三级 | 国产美女在线精品观看 | 天天做天天爱夜夜大爽完整 | 精品免费久久久久久成人影院 | 成年女人毛片 | 天天干天天干天天 | 日韩欧美视频在线一区二区 | 瑟瑟网站免费 | 精品女视频在线观看免费 | 狼色在线视频 | 色视频在线免费 | 轻点灬大ji巴太大太深了 | 一级看片免费视频 | 亚洲综合久久久久久888 | 毛片不卡一区二区三区 | 激情5月婷婷 | 国产欧美一级片 | 国产在线精品一区二区夜色 | 97久久精品国产精品青草 | 日日噜噜夜夜狠狠久久丁香 |