Spring使用ComponentScan掃描Maven多模組工程的其它模組

來源:互聯網
上載者:User

標籤:一個   .com   file   post   tac   bsp   add   blog   over   

說明:在建立好了Maven多模組工程後,如果想要在其它模組也能使用Spring的對象管理,比如@Autowrited這些注入方式,那麼就必須開啟包掃描的功能才能使其進行注入到Spring的對象管理中。

解決方案:

1、在Spring中配置ComponentScan的掃描包範圍,把要加入的的Module包路徑添加進去即可實現注入。

解釋:

一、對於XML的配置:

在XML配置了這個標籤後,Spring可以自動去掃描base-pack下面或者子包下面的java檔案,如果掃描到有@Component @[email protected]等這些註解的類,則把這些類註冊為Bean。

注意:如果配置了<context:component-scan>那麼<context:annotation-config/>標籤就可以不用再XML中配置了,因為前者包含了後者。另外<context:annotation-config/>還提供了兩個子標籤:

  1. <context:include-filter>
  2. <context:exclude-filter>

在說明這兩個子標籤前,先說一下<context:component-scan>有一個use-default-filters屬性,該屬性預設為true,這就意味著會掃描指定包下的全部的標有@Component的類,並註冊成Bean。也就是@Component的子註解@Service,@Reposity等。所以如果僅僅是在設定檔中這麼寫:

<context:component-scan base-package="com.jsoft.web"/>

Use-default-filter此時為true那麼會對base-package包或者子包下的所有的進行java類進行掃描,並把匹配的java類註冊成Bean。

可以發現這種掃描的粒度有點太大,如果你只想掃描指定包下面的Controller,該怎麼辦?此時子標籤<context:incluce-filter>就起到了用武之地。如下所示:

<context:component-scan base-package="com.jsoft.web.controller">  

  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   

</context:component-scan>  

這樣就會只掃描base-package指定下的有@Controller下的java類,並註冊成Bean。

但是因為use-dafault-filter在上面並沒有指定,預設就為true,所以當把上面的配置改成如下所示的時候,就會產生與你期望相悖的結果(注意base-package包值得變化):

<context:component-scan base-package="com.jsoft.web">  

  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   

</context:component-scan>  

此時,Spring不僅掃描了@Controller,還掃描了指定包所在的子包service包下註解@Service的java類。

此時指定的include-filter沒有起到作用,只要把use-default-filter設定成false就可以了。這樣就可以避免在base-packeage配置多個包名這種不是很優雅的方法來解決這個問題。

發現在base-package指定的包中有的子包是不含有註解了,所以不用掃描,此時可以指定<context:exclude-filter>來進行過濾,說明此包不需要被掃描。綜合以上說明Use-dafault-filters=”false”的情況下:<context:exclude-filter>指定的不掃描,<context:include-filter>指定的掃描範圍。

二、對於註解方式的使用,多數用於Spring Boot項目或者零配置的Spring MVC項目

其實本質都是一樣的,只是寫法不一樣而已。

@EnableAutoConfiguration: 

根據項目所使用的依賴自動進行配置。同時使用這個註解時,會預設在項目啟動時掃描當前包及其子包下。同時也可以在@CompentScan註解中配置baskPackage屬性來完成設定。如果自動完成的配置中包含了我們不需要的部分,則可以使用註解中的exclude屬性來剔除。 

@CompentScan: 

配置自動掃描,如果不配置任何屬性則掃描當前包及其子包。 

@Configuration: 

此註解標註了一個類為配置類。在使用SpringBoot時不需要在一個類中完成所有的配置。可以通過此註解標註並使該類可以被掃描,或者使用@Import註解來進行匯入配置。另外,在使用xml來進行配置時可以通過使用@ImportResource來匯入。 

@SpringBootApplication: 

相當於預設配置下的@[email protected][email protected],因為這三個註解經常同時使用,所以Spring給了一個簡單的方式來完成使用。 

 

參考:

http://blog.csdn.net/fewmore/article/details/50725412(以上內容部分轉自此篇文章)

http://blog.csdn.net/shenqingxiao/article/details/53897255(以上內容部分轉自此篇文章)

https://stackoverflow.com/questions/46784051/spring-boot-multi-module-project-load-property-file

https://stackoverflow.com/questions/12961394/how-to-autowire-service-in-another-module

https://stackoverflow.com/questions/34941862/spring-boot-configuration-in-a-multi-module-maven-project

https://stackoverflow.com/questions/33229793/how-to-add-multiple-application-properties-files-in-spring-boot

https://stackoverflow.com/questions/40384056/consider-defining-a-bean-of-type-package-in-your-configuration-spring-boot

https://www.cnblogs.com/maybo/p/5189516.html

http://blog.csdn.net/xieyuooo/article/details/9089441

http://blog.csdn.net/u011659172/article/details/51323066

http://jinnianshilongnian.iteye.com/blog/1762632

https://stackoverflow.com/questions/30970748/multiple-componentscan-in-spring-4

https://www.jianshu.com/p/752e2ba89dc3

http://blog.csdn.net/u013041642/article/details/78934157

http://blog.csdn.net/wolf2s/article/details/64473922

http://blog.csdn.net/ttjxtjx/article/details/49866011

Spring使用ComponentScan掃描Maven多模組工程的其它模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.