关于spring的扫描

1、扫描声明bean.

在spring项目中要用到bean就得先在配置文件中声明,声明后spring才能实现ioc和aop。

<!-- 配置Handler -->
    <bean id="itemsController1" name="/queryItems_test.action" class="cn.itcast.ssm.controller.ItemsController1" />
    <!-- 配置另外一个Handler -->
    <bean id="itemsController2" class="cn.itcast.ssm.controller.ItemsController2" />

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用XML的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。Spring为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在XML文件中使用bean节点配置组件是一样的。要使用自动扫描机制,我们只要在配置文件中加入下面这一句代码就够了。

<context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan>

其中spring会扫描base-package是引用的包,这样一句代码相当于配置了该包下的所以bean。
base-package=”cn.itcast.ssm.*”则表示扫描cn.itcast.ssm的所有子包,用逗号隔开不同包名即可扫描不同的包,如:base-package=”cn.itcast.ssm1.controller1,cn.itcast.ssm2.controller2”。在实际开发中基本都是用扫描包来实现的声明bean的。

2、注解处理器适配器和注解的处理器映射器。

使用spring注解需要配置注解处理器适配器和注解的处理器映射器。这项配置可以用简单的一句代码来实现:,甚至如果使用了上面的包扫描还可以把这句代码都省略。

注解映射器
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    注解适配器
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->

    <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
    mvc:annotation-driven默认加载很多的参数绑定方法,
    比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
    实际开发时使用mvc:annotation-driven
     -->
<mvc:annotation-driven></mvc:annotation-driven>

还可以在这里配置一些其他的内容,如

<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<!-- conversionService -->
    <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <!-- 转换器 -->
        <property name="converters">
            <list>
                <bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
            </list>
        </property>
    </bean>

这里conversion-service=”conversionService”是用来配置自定义参数的。

3、扫描实体类

spring和mybatis整合使用就必须为每个实体类定义别名,如下代码,可以针对单个别名定义,也可以指定包名批量定义。批量别名定义时,指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)。定义别名是为了在mapper中用到这个类的时候可以不用写全路径。

<!-- 别名定义 -->
    <typeAliases>

        <!-- 针对单个别名定义
        type:类型的路径
        alias:别名
         -->
        <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
        <!-- 批量别名定义
        指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)
        -->
        <package name="cn.itcast.mybatis.po"/>

    </typeAliases>

定义完每个类的别名后,每个为实体类操作数据库的mapper都要通过配置文件声明。加载映射文件是为了可以serviceImpl中直接调用mapper.java中的接口,不用通过sqlSession来调用mapper里面的接口操作数据库。

<!-- 加载 映射文件 -->
    <mappers>
        <mapper resource="sqlmap/User.xml"/>

        <!--通过resource方法一次加载一个映射文件 -->
        <!-- <mapper resource="mapper/UserMapper.xml"/> -->

        <!-- 通过mapper接口加载单个 映射文件
        遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
        上边规范的前提是:使用的是mapper代理方法
         -->
        <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> -->

        <!-- 批量加载mapper
        指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
        遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
        上边规范的前提是:使用的是mapper代理方法
         -->
        <package name="cn.itcast.mybatis.mapper"/>

    </mappers>

当spring和mybatis整合时,由于使用spring和mybatis的整合包进行mapper扫描,在spring容器里配置了,这里就不需要配置,但必须遵循:mapper.xml和mapper.java文件同名且在一个目录。在spring容器配置mapper:

<!-- mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
        <property name="basePackage" value="cn.itcast.ssm.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
时间: 2024-10-02 15:38:14

关于spring的扫描的相关文章

spring无法扫描jar包的问题

在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.spring却无法扫描到相应的bean.折腾了好久,最终发现是认识上的误区. 2015-11-11 17:06:15,610 ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed org.springframework.beans.factory.BeanCreationExc

spring mvc-springmvc 扫描controller放到父容器里请求不到

问题描述 springmvc 扫描controller放到父容器里请求不到 我把扫描controller的配置放在了applicationContext.xml中为什么请求不到,放到子容器dispatcher-servlet.xml中却能请求到.但是我以前看到过项目确实把扫描controller的配置放到了父容器中,想知道到底扫描controller的配置放在父容器中可不可以??? 解决方案 应该不行吧,,controller都是交给springmvc处理的

详解Spring 3.0基于Annotation的依赖注入实现

简介:Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的.然而,直到 Spring 3.0 以前,使用 XML 进行依赖配置几乎是唯一的选择.Spring 3.0 的出现改变了这一状况,它提供了一系列 的针对依赖注入的注解,这使得 Spring IoC 在 XML 文件之外多了一种可行的选择.本文将详细介绍如 何使用这些注解进行依赖配置的管理. 使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spri

Spring Boot

一.Spring Boot介绍 Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题-习惯大于约定. Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录. Spring Boot提供了一系列的依赖包,所以需要构建工具的支持:maven 或 gradle. 二.一个简单的springboot po

hibernate-一个Spring4Hibernate4的开源项目,spring注解了接口,这是什么意思?

问题描述 一个Spring4Hibernate4的开源项目,spring注解了接口,这是什么意思? //Service @Service @Transactional public class UserLogonLogService extends BaseService { @Autowired private UserLogonLogDao userLogonLogDao; ... //Dao @Repository public interface UserLogonLogDao exte

Spring Boot:定制servlet filters

在实际的web应用程序中,经常需要在请求(request)外面增加包装用于:记录调用日志.排除有XSS威胁的字符.执行权限验证等等.除了上述提到的之外,Spring Boot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,并且我们在自己的项目中还可以增加别的过滤器. Spring Boot.Spring Web和Spring MVC等其他框架,都提供了很多servlet 过滤器可使用,我们需要在配置文件中定义这些过滤器为bea

spring mvc+shiro+cas 实现cas client功能 跳转回来404

问题描述 spring mvc+shiro+cas 实现cas client功能 跳转回来404 http://securitycenter.com:8080/gtsys/cas?ticket=ST-14-HEDhc1GVQt0UYdiZpi7R-cas 返回这个地址 404 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or

Spring常用配置

----------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52471101作者:朱培      ID:sdksdk0      邮箱: zhupei@tianfang1314.cn   -------------------

浅析Spring中的注解

    Spring的配置,通常有两种:使用配置文件和注解.那么Spring如何知道各个Bean或者Service.Controller以及Bean中各类属性之间的关系呢?答案肯定是在定义各个Java文件的时候使用了各种注解,它们交织在一起,实现了使用配置文件完成的配置功能. 一.Bean相关的注解     与SpringBean相关的注解有以下四大类: @Component:标注一个普通的Spring Bean类 @Controller:标注一个控制器组件类 @Service:标注一个业务逻辑