说明:在新建好了Maven多模块工程后,如果想要在其它模块也能使用Spring的对象管理,比如@Autowrited这些注入方式,那么就必须开启包扫描的功能才能使其进行注入到Spring的对象管理中。

解决方法:

1、在Spring中配置ComponentScan的扫描包范围,把要加入的的Module包路径添加进去即可实现注入。

解释:

一、对于XML的配置:

在XML配置了这个标签后,Spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为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:

相当于默认配置下的@EnableAutoConfiguration+@CompentScan+@Configuration,因为这三个注解经常同时使用,所以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多模块工程的其它模块的更多相关文章

  1. Maven多模块工程打包指定模块工程方法

    Maven多模块工程打包指定模块工程执行如下命令: mvn clean package -pl  指定模块工程名 -am 参数说明: -am --also-make 同时构建所列模块的依赖模块:-am ...

  2. SSM(Spring MVC +Spring+Mybatis)整合——maven工程

    所谓的SSM 其实就是Spring MVC下整合mybatis. 具体的定义网络上都有,很详细. 这里只说项目的搭建步骤. 第一步 新建maven工程 工程目录如下: 配置pom.xml文件,引入所需 ...

  3. 基于tomcat插件的maven多模块工程热部署(附插件源码)

    内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...

  4. Maven的聚合工程(多模块工程)

    在开发2个以上模块的时候,每个模块都是一个 Maven Project.比如搜索平台,学习平台,考试平台.开发的时候可以自己管自己独立编译,测试,运行.但如果想要将他们整合起来,我们就需要一个聚合工程 ...

  5. maven创建web工程Spring配置文件找不到问题解决方案

    使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...

  6. spring启动component-scan类扫描加载过程(转)

    文章转自 http://www.it165.net/pro/html/201406/15205.html 有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程 ...

  7. 【建项目】eclipse maven建立多模块工程

    在工作的时候,大多时候都是用Maven来管理项目,可是一般我们都知道怎么用maven管理工程,却不知道通过Maven自己来建立多模块工程.于是自己抽时间,在网上找些资料,做了起来. 建立简单的Mave ...

  8. maven创建web工程Spring配置文件找不到

    使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...

  9. Eclipse创建Maven多模块工程Module开发(图文教程)

    自己研究了下Eclipse用Maven多模块工程Module开发,跟大家分享一下! 功能模块来分Module,跟java的package类似,一般是按照的功能模块分module,比如:sso/cas/ ...

随机推荐

  1. PHP 扒一扒这些题目都考了哪些知识点

    1.模除 题目: <?php echo -10%3; *结果* -1 分析:其实这道题的知识点是在考模除和正负号的关系,那么我们看一段进阶的代码 <?php echo "10%3 ...

  2. Linux动态库生成以及调用

    Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件. 在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是 ...

  3. 状压dp的题目列表 (一)

    状压dp的典型的例子就是其中某个数值较小. 但是某个数值较小也不一定是状压dp,需要另外区分的一种题目就是用暴力解决的题目,例如UVA818 紫书215 题目列表: ①校长的烦恼 UVA10817 紫 ...

  4. 汕头市队赛 yyl杯1 T1

    A SRM 05 - YYL 杯 R1 背景 傻逼题 描述 给一个序列,序列里只有两种元素1和2.现在要从序列里选出一些非空子序列使得子序列里两种元素数量相同.问有多少种方案数? 输入格式 多组数据 ...

  5. hdu 3003 Pupu

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003 题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可 ...

  6. HDU1174(空间点到直线的距离,用叉积)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  7. HDU1142 (Dijkstra+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  8. 【“10”力全开 游戏“Ti”厉害】ZX53VE-新飞行堡垒笔记本(Windows 10 Home/新七代标压i7-7700HQ/GTX 1050Ti 4G/8G内存/1TB+128GB)

    [“10”力全开 游戏“Ti”厉害]ZX53VE-新飞行堡垒笔记本(Windows 10 Home/新七代标压i7-7700HQ/GTX 1050Ti 4G/8G内存/1TB+128GB) http: ...

  9. 关于oracle的连接时ORA-12519错误的解决方案

    系统在运行时出现了ORA-12519的错误,无法连接数据库,后来在网上找了下,找到了如下的解决方法,共享下. OERR: ORA-12519 TNS:no appropriate service ha ...

  10. 兼容IE的超出文字隐藏

    overflow: hidden; white-space: nowrap; -o-text-overflow: ellipsis; /* for Opera */ text-overflow: el ...