標籤:一個 .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/>還提供了兩個子標籤:
- <context:include-filter>
- <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多模組工程的其它模組