关于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>
- 关于spring的扫描
- 关于spring annotation扫描目录的定义
- 关于context:component-scan扫描spring注解标记的用法
- 关于spring和springmvc的xml自动扫描配置问题
- Spring 的扫描
- myBatis-Spring-mvc里关于扫描service
- 关于spring、pringmvc整合时注解扫描
- Spring的自动扫描注入
- spring自动扫描的问题
- 关于spring Entity 在不同包下的无法扫描的解决方案
- spring类扫描注入-----类扫描的注解解析器
- HEVC逆扫描之二:关于扫描表的说明
- 关于Spring注解自动扫描中的 base-package
- 让spring的AnnotationSessionFactoryBean支持路径扫描
- Spring的组件自动扫描机制
- Spring的组件自动扫描机制
- Spring的组件自动扫描机制
- Spring的组件自动扫描机制
- Python图像处理错误
- ArrayList和Array的区别于优势
- SVM对非线性数据的科幻理解
- PHP 无限级分类
- bzoj2818: Gcd
- 关于spring的扫描
- 自定义View 钟表
- poj2762 Going from u to v or from v to u?
- Handler机制分析(1)
- Android系统服务分析之服务注册过程
- 图像处理算法——卷积
- 5-13 Insert or Merge (25分)
- 【PAT】【Advanced Level】1006. Sign In and Sign Out (25)
- manacher算法--最长回文子串