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

@AutoConfigurationPackage與@ComponentScan注解區(qū)別

 更新時間:2023年06月15日 14:22:29   作者:江南一點(diǎn)雨  
這篇文章主要介紹了@AutoConfigurationPackage與@ComponentScan注解區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

面試真是越來越卷了,最近又有小伙伴在微信上問到松哥這樣一個面試題,想到這兩個的區(qū)別其實(shí)還有點(diǎn)意思,因?yàn)檎黄恼潞托』锇閭冝垡晦邸?/p>

AutoConfigurationPackage 就是自動配置包

首先,從名字上看,這兩個注解意義特別接近,@AutoConfigurationPackage 就是自動配置包,自動配置包的目的是能讓系統(tǒng)掃描到包內(nèi)的 Bean;@ComponentScan 則是組件掃描,這個松哥在之前的教程中也多次提到過了,就不再贅述了,所以這里就有一個問題,這兩個注解有啥區(qū)別?

首先大家思考這樣一個問題:

現(xiàn)在大多數(shù)項(xiàng)目可能都是用的 MyBatis 或者 MyBatis-Plus 這樣的數(shù)據(jù)持久化框架,當(dāng)我們在 Spring Boot 中使用 MyBatis 的時候,我們一般需要在 Mapper 接口上添加一個 @Mapper 注解,類似下面這樣:

@Mapper
public?interface?UserMapper?{
}

或者在啟動類上加 Mapper 掃描注解去統(tǒng)一掃描所有的 Mapper 接口,類似下面這樣:

@SpringBootApplication
@MapperScan(basePackages?=?"org.javaboy.auto_package")
public?class?AutoPackageApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(AutoPackageApplication.class,?args);
????}
}

平時我們都這樣寫,沒有任何問題,現(xiàn)在假設(shè)我們換一個寫法,假如我的類結(jié)構(gòu)如下:

├── main
│?? ├── java
│?? │?? └── org
│?? │??     └── javaboy
│?? │??         └── auto_package
│?? │??             ├── config
│?? │??             │?? ├── AutoPackageApplication.java
│?? │??             │?? └── UserController.java
│?? │??             ├── mapper
│?? │??             │?? └── UserMapper.java
│?? │??             └── service
│?? │??                 └── UserService.java

小伙伴們看到,我把啟動類和 UserController 放在一個單獨(dú)的包中,UserMapper 和 UserService 也分別位于不同的包中,其中在 UserController 中注入了 UserService,在 UserService 中則注入了 UserMapper,大致上就這么一個關(guān)系。

按照我們之前對 Spring Boot 的理解,這個項(xiàng)目啟動肯定會報錯,因?yàn)槟J(rèn)情況下,系統(tǒng)掃描的 Bean 是啟動類所在的包以及子包下的所有 Bean(因?yàn)?nbsp;@SpringBootApplication 注解在啟動類上),所以上面這個項(xiàng)目啟動的時候,能掃描到 UserController,但是掃描不到 UserService,所以啟動的時候會報錯,如下:

大家看下,這意思很明確,UserService 找不到,所以啟動失敗。

在啟動類上加 @ComponentScan 注解

解決這個問題的辦法很簡單,要么將啟動類放到根包下面,這樣所有的 Bean 默認(rèn)就都能掃描到了,要么我們重新配置包掃描,這里我采用第二種方案,我們在啟動類上加 @ComponentScan 注解,重新指定掃描的包,如下:

@SpringBootApplication
@ComponentScan(basePackages?=?"org.javaboy.auto_package")
public?class?AutoPackageApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(AutoPackageApplication.class,?args);
????}
}

加上之后,我們再次啟動,發(fā)現(xiàn)又報錯了,如下:

雖然再次出錯,但是跟之前的錯誤并不一樣,這次是沒找到 UserMapper 這個 Bean,說明 UserService 是找到了!

從這里我們就可以看出來,@ComponentScan 注解掃描組件是不會掃描到 @Mapper 注解的!

事實(shí)上,@ComponentScan 注解主要是掃描 Spring 家族的各種 Bean,如 @Controller、@Service、@Component、@Repository 以及由此衍生出來的一些其他的 Bean,對于 Spring 家族之外的 Bean,如 MyBatis 的 @Mapper、@MapperScan,JPA 的 @Entity 等,@ComponentScan 都掃不到!

誰能掃到呢?那就是我們今天的另外一個主角 @AutoConfigurationPackage,這個注解其實(shí)就是專門用來掃這些第三方的各種 Bean 的。

現(xiàn)在,我們在項(xiàng)目啟動上加上 @AutoConfigurationPackage 注解,并設(shè)置需要掃描的位置,如下:

@SpringBootApplication
@AutoConfigurationPackage(basePackages?=?"org.javaboy.auto_package")
@ComponentScan(basePackages?=?"org.javaboy.auto_package")
public?class?AutoPackageApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(AutoPackageApplication.class,?args);
????}
}

此時,項(xiàng)目就可以成功啟動了,因?yàn)?nbsp;@AutoConfigurationPackage(basePackages = "org.javaboy.auto_package") 注解可以掃描到 @Mapper 注解。

當(dāng)然,這里只是為了給大家演示問題,實(shí)際場景下直接在啟動類上加 @MapperScan(basePackages = "org.javaboy.auto_package") 注解就可以了。因?yàn)?@MapperScan 注解是 mybatis-spring 提供的,而 @Mapper 是 MyBatis 自己提供的,兩個注解的出處本身就不同。

默認(rèn)情況下,Spring Boot 項(xiàng)目的啟動注解中,實(shí)際上已經(jīng)包含了 @AutoConfigurationPackage 注解,具體位置在 @SpringBootApplication->@EnableAutoConfiguration->@AutoConfigurationPackage,默認(rèn)該注解沒有指定 basePackages 屬性,表示使用啟動類所在的包作為根包,掃描該包下的所有第三方 Bean,所以我們平時在 Spring Boot 中使用 MyBatis 的時候,是不需要額外加 @AutoConfigurationPackage 注解的。

經(jīng)過上面問題的演示,相信小伙伴們已經(jīng)搞明白了 @AutoConfigurationPackage 和 @ComponentScan 的區(qū)別了吧?

總結(jié)

兩者都是用來掃描 Bean 的。

@ComponentScan 主要用來掃描和 Spring 容器相關(guān)的 Bean。

@AutoConfigurationPackage 主要用來掃描第三方的 Bean。

以上就是@AutoConfigurationPackage與@ComponentScan注解區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于@AutoConfigurationPackage@ComponentScan區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java制作智能拼圖游戲原理及代碼

    Java制作智能拼圖游戲原理及代碼

    本文給大家分享的是使用Java實(shí)現(xiàn)智能拼圖游戲的原理,以及實(shí)現(xiàn)的源碼,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • spring boot實(shí)現(xiàn)過濾器和攔截器demo

    spring boot實(shí)現(xiàn)過濾器和攔截器demo

    本篇文章主要介紹了spring boot實(shí)現(xiàn)過濾器和攔截器demo ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • IDEA連接遠(yuǎn)程服務(wù)器簡化部署流程

    IDEA連接遠(yuǎn)程服務(wù)器簡化部署流程

    筆者每次上線部署應(yīng)用,都要使用第三方的客戶端連接工具,比如?Xshell,FinalShell,Terminus?等,基本的流程步驟及其繁瑣,基于這個原因,筆者今天探索通過?IDEA?連接遠(yuǎn)程服務(wù)器并上傳文件,減少繁瑣的部署步驟,需要的朋友可以參考下
    2024-01-01
  • springsecurity實(shí)現(xiàn)攔截器的使用示例

    springsecurity實(shí)現(xiàn)攔截器的使用示例

    Spring Security 可以替代攔截器,同時還可以提供更加細(xì)粒度的權(quán)限控制和身份認(rèn)證,本文就來介紹一下springsecurity實(shí)現(xiàn)攔截器的使用示例,感興趣的可以了解一下
    2023-10-10
  • 微信小程序完整項(xiàng)目實(shí)戰(zhàn)記錄(前端+SpringBoot后端)

    微信小程序完整項(xiàng)目實(shí)戰(zhàn)記錄(前端+SpringBoot后端)

    隨著微信小程序的流行,越來越多的開發(fā)者開始涉足小程序開發(fā),下面這篇文章主要給大家介紹了關(guān)于微信小程序完整項(xiàng)目實(shí)戰(zhàn)的相關(guān)資料,項(xiàng)目包括前端+SpringBoot后端,需要的朋友可以參考下
    2024-09-09
  • Java8 HashMap的實(shí)現(xiàn)原理分析

    Java8 HashMap的實(shí)現(xiàn)原理分析

    Java8之后新增挺多新東西,接下來通過本文給大家介紹Java8 HashMap的實(shí)現(xiàn)原理分析,對java8 hashmap實(shí)現(xiàn)原理相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • 如何基于ThreadPoolExecutor創(chuàng)建線程池并操作

    如何基于ThreadPoolExecutor創(chuàng)建線程池并操作

    這篇文章主要介紹了如何基于ThreadPoolExecutor創(chuàng)建線程池并操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • struts2的流程和一系列相關(guān)知識代碼解析

    struts2的流程和一系列相關(guān)知識代碼解析

    這篇文章主要介紹了struts2的流程和一系列相關(guān)知識代碼解析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot容器化部署之Docker與Kubernetes操作指南

    SpringBoot容器化部署之Docker與Kubernetes操作指南

    本文介紹了如何將SpringBoot應(yīng)用進(jìn)行容器化部署,通過Docker和Kubernetes進(jìn)行編排和管理,涵蓋了從項(xiàng)目創(chuàng)建、Dockerfile編寫、鏡像構(gòu)建、容器運(yùn)行到Kubernetes部署、監(jiān)控和維護(hù)的全流程
    2025-12-12
  • JAVA+MySQL實(shí)現(xiàn)分庫分表的項(xiàng)目實(shí)踐

    JAVA+MySQL實(shí)現(xiàn)分庫分表的項(xiàng)目實(shí)踐

    本文主要介紹了JAVA+MySQL實(shí)現(xiàn)分庫分表的項(xiàng)目實(shí)踐,包括水平分表、垂直分表和水平分庫等策略,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05

最新評論

交口县| 孟村| 临西县| 乌审旗| 谷城县| 喀喇沁旗| 府谷县| 黄浦区| 鄯善县| 固安县| 安仁县| 沙田区| 郑州市| 卫辉市| 新安县| 施秉县| 马龙县| 惠来县| 银川市| 苏州市| 德清县| 齐齐哈尔市| 顺昌县| 原平市| 和硕县| 博罗县| 梁河县| 孟州市| 抚顺县| 轮台县| 无棣县| 龙口市| 栾城县| 江孜县| 湖州市| 吉木萨尔县| 通江县| 广丰县| 乌鲁木齐县| 曲水县| 呼玛县|