`
com0606
  • 浏览: 60961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring scan扫描jar包中的bean

    博客分类:
  • work
 
阅读更多

由于多个项目之中有很多重复的内容,在做新项目的时候需要复制粘贴很多重复的东西。所以需要对项目进行重构进行依赖。

项目是用maven进行构建和管理的,所以先进行父子项目划分,然后抽离公用部分,新建项目的时候直接依赖。项目结构为一个父项目,之下若干子项目,子项目有util,dao,controller,web等项目。web项目为前端页面,单独提供给FE做开发用,这样多个web项目可以共用一套后台逻辑。

项目mvc是用的WF框架,底层是依赖spring-context和spring-webmvc,然后做了一下封装。所以根本上还是和springmvc的使用无异。

但是在实验的过程中发现项目不能正常启动,bean没有被注入。进行测试发现,如果controller和web分离的话bean没有注入,但是合并却可以,因为web项目是依赖的controller项目,最终项目build之后controller项目被打成jar放入web项目的lib中。而对于controller的扫描是用的component-scan方式,因此问题就变成了spring不能scan到jar中bean。

对于引入applicationContext.xml配置文件的两种方式:

 

classpath*:applicationContext.xml

 会加入本项目及所有jar包根目录下的applicationContext.xml文件,跨jar包依赖时使用

 

 

classpath:applicationContext.xml

 只加入本项目根目录下的applicationContext.xml文件,不依赖其它jar包的配置文件时可以这样写

 

WF框架初始化spring的bean容器不是由使用者配置启动的,而是使用web-fragment新特性,在项目启动时自动进行一系列的初始化(这一点感觉很shit)。查看源代码发现启动时也是用的classpath*这种方式,按理说是可以搜索到所有jar中的applicationContext.xml。但是在WF框架中applicationContext.xml配置文件不是在项目的根目录中,而是在依赖WF的相关jar中的。研究spring初始化bean的过程发现,在最终扫描.class并进行初始化的过程是用getClassLoader().getResources("")的方式获取Resource对象的,而对于这种方式,是只能获取当前classpath中的文件的。这个classpath是相对于applicationContext.xml来说的,也就是说applicationContext.xml位于哪里,就会加载到该项目的classpath,并不能跨jar进行。

于是将applicationContext.xml文件拷贝一份放到controller项目的classpath中,重新启动项目,果然可以了,所有的bean被初始化。

 

关于spring的component-scan扫描初始化bean的过程可以参见这篇博客

http://www.it165.net/pro/html/201406/15205.html

分享到:
评论

相关推荐

    Spring自动扫描无法扫描jar包中bean的解决方法

    然而,当Bean定义在独立的jar包中,有时Spring可能无法正确扫描并加载这些Bean。这种情况通常发生在将公共模块打包成jar,并在其他项目中作为依赖引入时。本文将深入探讨这个问题,并提供解决方案。 首先,我们需要...

    整合mybatis和spring需要的jar包

    - 集成Mapper:在Spring配置文件中,使用`mybatis:scan`或`mybatis:mapper`标签扫描或注册Mapper接口,使它们可以在Spring环境中被注入使用。 - 使用Spring管理SqlSession:通过`SqlSessionFactoryBean`创建...

    mybatis和spring整合jar包

    3. **Spring的Mapper扫描器**:通过使用`<mybatis:scan>`标签,Spring可以自动发现并管理所有的Mapper接口。 4. **事务管理**:Spring可以管理MyBatis的事务,通过配置事务管理器(如DataSourceTransactionManager...

    Spring定义bean的三种方式和自动注入

    在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...

    spring ibatis整合所需jar包

    6. 配置Spring扫描DAO接口:在Spring配置文件中,使用`<context:component-scan>`元素扫描包含DAO接口的包,以便Spring能自动创建bean。 7. 事务配置:根据业务需求,配置Spring的事务管理器,如...

    mybatis与spring整合全部jar包(包括springmvc).zip

    6. 配置Mapper扫描器:在Spring配置文件中,使用`mybatis:scan`标签扫描Mapper接口,使其能够被Spring管理。 7. 使用:在Spring MVC的Controller中,通过@Autowired注解注入Mapper接口,直接调用其方法执行数据库...

    spring2.5的所有jar包

    例如,`<context:component-scan>`标签可以扫描指定包下的所有注解组件。 4. **注解驱动开发**:Spring 2.5大大增强了对Java注解的支持,如`@Service`、`@Repository`和`@Controller`,这些注解可以替代XML中的bean...

    spring2.0 jar包

    8. **XML配置简化**:通过引入Namespace,Spring 2.0的XML配置文件变得更加简洁易读,例如`<context:component-scan>`用于自动发现和注册bean。 9. **支持EJB 3.0**:虽然Spring倡导轻量级容器,但2.0版本开始支持...

    较为传统的Spring配置的jar包 lib.zip

    "较为传统的Spring配置的jar包 - lib.zip" 提供的是一组与Spring早期版本相关的库文件,这些文件通常包含了Spring的核心组件和一些依赖,使得我们能够构建基于Spring的旧版应用。在描述中提到的"Spring比较古老的...

    Spring自动扫描

    在Spring框架的发展过程中,为了更好地管理和配置Bean,Spring2.5引入了一种更为灵活便捷的方式——自动扫描(Auto Scan)。这一特性使得开发者无需在XML配置文件中显式声明每一个Bean,极大地简化了配置过程,尤其...

    spring-framework-3.2.4.RELEASE-dist.jar包

    本文将围绕"spring-framework-3.2.4.RELEASE-dist.jar"包展开,深入解析Spring 3.2.4版本的核心特性和关键知识点,帮助开发者更好地理解和使用这一版本。 一、Spring概述 Spring最初由Rod Johnson创建,旨在简化...

    spring+mybatis整合jar

    - 通过`<mybatis:scan>`标签可以在Spring配置文件中简化Mapper接口的扫描。 - 利用Spring的AOP,可以方便地实现全局异常处理和事务回滚策略。 - 针对复杂的业务逻辑,可以利用Spring的Service层,将多个DAO操作...

    spring-framework-4.2.4.RELEASE.7z

    例如,`spring-beans.xsd`定义了bean元素,`spring-context.xsd`则定义了与上下文相关的元素,如context:component-scan用于扫描并自动注册bean。 总的来说,Spring框架4.2.4.RELEASE提供了强大的功能,包括依赖...

    Spring mvc 环境搭建(含所需的jar包)

    本教程将详细阐述如何搭建Spring MVC的开发环境,包括所需的jar包。 首先,为了搭建Spring MVC环境,我们需要安装以下软件: 1. **JDK**:确保你的系统已经安装了Java Development Kit(JDK),至少是1.8版本,...

    spring3.x注解

    需要在 XML 配置文件中启用 Bean 的自动扫描功能,通过<context:component-scan/>实现。 3. @Service @Service 注解用于标注业务层组件。 4. @Controller @Controller 注解用于标注控制层组件(如 Struts 中的 ...

    aopalliance-1.jar

    - `<context:component-scan>`元素:用于启用组件扫描功能,自动检测指定包下的注解类,并将其注册为Spring管理的Bean。这里设置了`base-package`属性,指定扫描的起始包名为`cn.itcast.anno`。 ### 综合分析 综上...

    spring2 整合 Dwr(把DWR的配置写到Spring的配置文件)

    - **配置Spring扫描DWR接口**:通过 `<context:component-scan>` 标签指定扫描包含DWR远程接口的包,Spring会自动注册这些接口。 - **映射URL**:在Spring的DispatcherServlet配置中,为DWR配置URL映射,如 `...

    基于IDEA的SSH项目之三:配置Spring二----程序包

    此外,可以利用Spring的自动扫描功能,通过`<context:component-scan>`标签自动发现并管理包中的bean。 7. **测试**:在IDEA中,可以创建JUnit测试来验证Spring配置的正确性。测试类通常位于`src/test/java`目录下...

    spring和Mybatis的xml配置文件提示约束包

    2. `<context:component-scan>`:用于自动扫描指定包下的Bean定义。 3. `<aop:config>`:用于配置AOP(面向切面编程)。 4. `<tx:annotation-driven>`:启用事务管理,基于注解的方式。 Mybatis的XML配置文件主要...

Global site tag (gtag.js) - Google Analytics