`
zqs125
  • 浏览: 7193 次
文章分类
社区版块
存档分类
最新评论

Spring和SpringMVC自动扫描注解类的冲突问题

    博客分类:
  • Java
阅读更多

Spring MVC项目中通常会有二个配置文件,spring-servlet.xml和applicationContext.xml二个配置文件,通常会出现以下几个配置:

 

1. <context:annotation-config />

 

它的作用是隐式地向 Spring 容器注册  
- AutowiredAnnotationBeanPostProcessor、
- CommonAnnotationBeanPostProcessor、
- PersistenceAnnotationBeanPostProcessor、
- RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor。

 

其作用是如果你想在程序中使用注解,就必须先注册该注解对应的类,如下图所示:

依赖的类 注解
CommonAnnotationBeanPostProcessor @Resource 、@PostConstruct、@PreDestroy
PersistenceAnnotationBeanPostProcessor @PersistenceContext
AutowiredAnnotationBeanPostProcessor @Autowired
RequiredAnnotationBeanPostProcessor @Required

 

当然也可以自己进行注册:

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/> 
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

 

2. <context:component-scan base-package="com.*" >

 

<context:component-scan/> 配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。

 

在这里有一个比较有意思的问题,就是扫描是否需要在二个配置文件都配置一遍,我做了这么几种测试:

 

(1)只在applicationContext.xml中配置如下

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

启动正常,但是任何请求都不会被拦截,简而言之就是@Controller失效

 

(2)只在spring-servlet.xml中配置上述配置

启动正常,请求也正常,但是事物失效,也就是不能进行回滚

 

(3)在applicationContext.xml和spring-servlet.xml中都配置上述信息

启动正常,请求正常,也是事物失效,不能进行回滚

 

(4)在applicationContext.xml中配置如下

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

在spring-servlet.xml中配置如下

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

此时启动正常,请求正常,事物也正常了。

 

结论:在spring-servlet.xml中只需要扫描所有带@Controller注解的类,在applicationContext中可以扫描所有其他带有注解的类(也可以过滤掉带@Controller注解的类)。

 

3. <mvc:annotation-driven />

它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter

  • 大小: 12.2 KB
0
2
分享到:
评论
5 楼 zqs125 2016-08-17  
steven138 写道
配置的成功与否,跟在spring-servlet.xml还是在applicationContext.xml中注册没半毛钱关系。spring-servlet或applicationContext只是个文件,用aaa.xml一样可以,重要的是你的配置文件的加载顺序

我同意你的观点,但即使是aaa、bbb之类的,配置的内容还是一样的,还是会遇到此类问题
4 楼 yz576965161 2016-05-17  
steven138 写道
配置的成功与否,跟在spring-servlet.xml还是在applicationContext.xml中注册没半毛钱关系。spring-servlet或applicationContext只是个文件,用aaa.xml一样可以,重要的是你的配置文件的加载顺序

你说的是对的,楼主你要正确理解这两个配置文件的作用,还是再仔细看看api吧
3 楼 steven138 2016-05-17  
配置的成功与否,跟在spring-servlet.xml还是在applicationContext.xml中注册没半毛钱关系。spring-servlet或applicationContext只是个文件,用aaa.xml一样可以,重要的是你的配置文件的加载顺序
2 楼 endual 2016-05-17  
spring-servlet.xml
从名称来看,servlet只负责C层,应该是只负责controller,不知道这么个理解对不对。
1 楼 endual 2016-05-17  
点赞  

相关推荐

    spring + springmvc + mybatis整合

    Spring、SpringMVC和MyBatis是Java Web开发中非常流行的三大框架,它们共同构建了高效、灵活的企业级应用程序。这个项目将这三个框架整合在一起,为开发者提供了一个基础的SSM(Spring+SpringMVC+MyBatis)应用模板...

    spring+springmvc+Mybatis_maven框架整合

    Spring、SpringMVC和MyBatis是Java Web开发中非常流行的三大框架,它们共同构建了一个高效、松耦合的应用架构。Maven作为项目管理和构建工具,使得这些框架的集成更加便捷。下面将详细介绍如何整合这四个关键技术...

    SSM框架整合Spring+SpringMVC+Mybatis

    5. **编写业务逻辑**:使用Spring的注解(如@Service、@Repository)标记业务层和服务层的类,使用MyBatis的注解(@Select、@Insert等)在DAO接口中定义SQL语句。 6. **测试与调试**:编写JUnit测试用例,验证SSM...

    IDEA整合ssm项目(spring + springMVC + mybatis + lombok)

    - 使用@Service、@Repository和@Controller注解标记业务层、数据访问层和控制层类。 - 在IDEA中安装Lombok插件,确保IDEA能识别Lombok的注解并自动生成相应代码。 - 编写index.jsp作为项目的入口页面,位于Web-...

    SpringMVC注解整合Mybatis和ExtJs5.0

    在本项目中,我们主要探讨的是如何利用SpringMVC注解和Mybatis框架来构建一个与ExtJS 5.0前端交互的后台管理框架。这是一个常见的企业级应用开发模式,旨在提供高效、灵活且易于维护的系统。让我们逐一分析这个项目...

    集成springmvc spring hibernate的配置

    在`bean.xml`中,我们启用注解配置,以便可以使用Spring的注解如@Service和@Repository,同时避免与Spring MVC的@Controller注解冲突。这部分配置如下: ```xml *"&gt; ...

    SSH(springmvc+spring4.1+hibernate4.0)jar包整合

    本项目针对旧版本SSH存在的问题,如Spring版本过低和Hibernate版本过低,以及可能的jar包冲突进行了更新和整合。 首先,Spring 4.1引入了许多改进和新特性。例如,它加强了对Java 8的支持,包括日期和时间API的改进...

    spring+springmvc整合mabytis时mapper注入失败问题解决方法

    在Spring + SpringMVC 整合 MyBatis 的过程中,可能会遇到Mapper注入失败的问题,这个问题通常是由于配置不正确或者依赖冲突导致的。以下是一些可能导致此类问题的原因和相应的解决策略。 1. **Spring Context未...

    springMvc所有jar

    - **MyBatis-Spring**:这是一个整合框架,用于将 MyBatis 与 Spring 结合,提供事务管理、自动扫描 Mapper 接口等功能。 - **SqlSessionTemplate** 和 **SqlSessionManager**:这两个类是 MyBatis-Spring 提供的...

    mybatis-plus集成springboot和springmvc

    例如,确保数据库连接信息正确、配置文件中的路径匹配实体类和 Mapper 文件、以及 Spring 的扫描范围包含所有必要的组件。 在实际使用中,MyBatis-Plus 提供的功能包括但不限于: - **条件构造器**:通过 `Query...

    搭建spring mvc+spring+ibatis所需所有jar包

    3. **事务控制**:通常在Service层使用@Transactional注解进行事务控制,Spring会自动管理事务的开启、提交和回滚。 4. **异常处理**:在Controller层捕获并处理可能抛出的异常,确保正常响应。 这些jar包的集合...

    IntelliJ IDEA 2017建立简单springMVC(hua)

    SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,通过提供注解来简化 Web 层的开发。IntelliJ IDEA 是一个商业化的 Java IDE,它支持各种框架的项目搭建和开发。 在 IntelliJ ...

    一个springMVC和mybatis的简单整合例子

    同时,通过Spring的MapperScannerConfigurer或@MapperScan注解扫描Mapper接口,实现自动装配。 错误解决方案文档可能涵盖了以下几个方面: 1. 配置问题:如Spring的配置文件中缺少必要组件的声明,MyBatis的配置...

    spring注解实现注入.zip

    在Spring框架中,注解注入是一种非常常用且强大的依赖注入(Dependency Injection,简称DI)...同时,结合组件扫描、配置类以及各种作用域和环境注解,Spring为开发者提供了丰富的工具来构建松散耦合、易于测试的系统。

    Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)

    在Spring MVC和MyBatis的集成中,我们需要在`springmvc-mybatis.xml`中定义数据源、SqlSessionFactory以及Mapper扫描器。数据源配置连接到MySQL数据库,SqlSessionFactory创建会话工厂,而Mapper扫描器则允许Spring...

    maven搭建SSM

    在 spring.xml 文件中,配置数据源、扫描注解类以便 Spring 初始化。在 spring-mybatis.xml 文件中,配置 SQLSessionFactory、MapperScannerConfigurer,扫描接口所在的包,使得 Service 可以调用相关方法。 3. **...

    SpringMVC_mybatis整合jar包.zip

    数据源配置用于连接数据库,SqlSessionFactoryBean生成SqlSessionFactory,MapperScannerConfigurer扫描Mapper接口,自动加载到Spring容器中。 接下来,我们需要配置MyBatis的SqlSessionFactory,包括设置数据源、...

    springMVC教程

    - `&lt;context:component-scan&gt;`:扫描带有特定注解(如@Controller、@Service、@Repository)的类,自动注册到Spring容器中。 - `&lt;mvc:view-resolvers&gt;`:配置视图解析器,如`InternalResourceViewResolver`,指定...

    springmvc和mybatis整合的所有jar包

    2. **spring-core-4.1.3.RELEASE.jar**:Spring的核心库,包含IoC(Inversion of Control)容器的基础类和工具,如Bean工厂、Resource接口等。它是Spring其他模块的基础。 3. **spring-webmvc-4.1.3.RELEASE.jar**...

    Hibernate3.3+SpringMVC整合需要的所有包

    4. **配置Hibernate实体扫描**:在Spring配置中添加扫描注解实体类的路径。 5. **配置Spring MVC**:定义视图解析器,处理器映射器和处理器适配器。 6. **编写业务逻辑**:使用Spring的`@Service`注解标记业务层组件...

Global site tag (gtag.js) - Google Analytics