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>