说明:在新建好了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设计模式-工厂模式、单例模式、注册模式

    本文参考慕课网<大话PHP设计模式>-第五章内容编写,视频路径为:http://www.imooc.com/video/4876 推荐阅读我之前的文章:php的设计模式 三种基本设计模式, ...

  2. C# windows application Hello World

    创建一个Windows application项目,然后可以调用里面的工具来生成代码. using System; using System.Collections.Generic; using Sy ...

  3. .NET之特性和属性(转)

    1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定 ...

  4. 不能使用联机NuGet 程序包

    打开菜单栏>>工具>>选项>>NuGet 程序包管理器>>选择程序包源 勾选上nuget.org,即可使用联机的Nuget包  

  5. VC6.0显示行号的插件

    VC6.0显示行号的插件,很好很强大的显行号插件,使用VC编程的朋友再也不用烦恼VC6.0没有行号的编程环境了. VC显示行号插件使用说明:1. 如果你的VC安装在C盘,请拷贝文件VC6LineNum ...

  6. BroadCastRecieve

    首先介绍一下BroadCastRecieve有几种: 1.无序广播(普通广播):sendBroadcast()方式 2.有序广播:sendOrderedBroadcast()方式 3.粘性广播:sen ...

  7. UVALIVE 3939 Plucking fruits

    并查集解决.代码跑的有够慢.应该可以通过边权排序优化. #include <map> #include <set> #include <list> #include ...

  8. IC卡的传输协议(2)-块传输协议T=1续【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172025.HTM (3)容错操作 先来看一下容错的规则定义. * 复位应答后,第一个数据块是由终端发往IC卡的,而且 ...

  9. linux服务与进程

    linux服务与进程 http://www.cnblogs.com/jamesbd/p/3567654.html linux服务与进程 1.应用程序 2.服务脚本 3.配置文件 4.查看进程 5.查看 ...

  10. logging模块的使用

    # -*- coding: utf-8 -*- import os import time import logging import sys log_dir1=os.path.join(os.pat ...