关于spring的扫描

来源:互联网 发布:ubuntu查看64位 32位 编辑:程序博客网 时间:2024/06/05 01:00

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>
原创粉丝点击