Mybatis结合Spring注解自己主动扫描源代码分析
2017-06-30 10:07
411 查看
作为一个想做架构师的程序猿,必须是一个优秀的程序猿。在引入某一个框架的时候,必需要研究源代码,将新的开源框架的风险变为可控性。
1.Spring结合Mybatis最经常使用的配置。
[align=left]<!--理论加实践,才是架构师嘚最佳实践 -->[/align]
<!--JDBC
Data Source -->
[align=left] <bean id= "testdataSource"[/align]
[align=left] class= "org.springframework.jdbc.datasource.DriverManagerDataSource" >[/align]
[align=left] <property name= "driverClassName" value="oracle.jdbc.driver.OracleDriver" />[/align]
<!--
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
[align=left] /> -->[/align]
[align=left] <property name= "url" value="jdbc:oracle:thin:@192.168.137.101:1521:ora92" />[/align]
[align=left] <property name= "username" value ="sale" />[/align]
[align=left] <property name= "password" value ="sale" />[/align]
[align=left] </bean>[/align]
[align=left] <bean id= "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >[/align]
[align=left] <property name= "dataSource" ref ="testdataSource" />[/align]
[align=left] <property name= "mapperLocations">[/align]
[align=left] <list>[/align]
[align=left] <value> classpath:com/etrading /mapping/**/*Mapper.xml</ value>[/align]
[align=left] </list>[/align]
[align=left] </property>[/align]
<!--
<property name="typeAliasesPackage" value="com.nicchagil.mybatis3spring3intg.bean"
[align=left] /> -->[/align]
[align=left] </bean>[/align]
[align=left] <bean class= "org.mybatis.spring.mapper.MapperScannerConfigurer" >[/align]
[align=left] <property name= "basePackage"[/align]
[align=left] value= "com/etrading/mapping/common;com/etrading/mapping/account" />[/align]
[align=left] <property name= "sqlSessionFactoryBeanName" value="sqlSessionFactory" />[/align]
[align=left] </bean>[/align]
[align=left]1)Spring为了整合Mybatis,专门封装了一个jar包(mybatis-spring-1.2.3.jar),当中MapperScannerConfigurer封装了自己主动扫描全局路径下的Mapper[/align]
[align=left]2)MapperScannerConfigurer源代码分析(基于mybatis-spring-1.2.3.jar)[/align]
[align=left] 事实上要弄通源代码,一定要弄通spring容器源代码,这个是基础(理解框架设计的思想,事实上非常多代码思想是能够复用的)[/align]
[align=left] 简单的梳理下Spring容器思想:[/align]
[align=left] Spring容器环境起来-->通过refresh()方法刷新容器(比較简洁)[/align]
[align=left] MapperScannerConfigurer就是在刷新容器的过程中自己主动的运行方法postProcessBeanDefinitionRegistry[/align]
[align=left] /**[/align]
[align=left] * {@inheritDoc}[/align]
[align=left] * 通过Spring容器触发postProcessBeanDefinitionRegistry[/align]
[align=left] * @since 1.0.2[/align]
[align=left] */[/align]
[align=left] @Override[/align]
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry
registry) {
if ( this. processPropertyPlaceHolders )
{
[align=left] processPropertyPlaceHolders();[/align]
[align=left] }[/align]
[align=left] //核心处理类ClassPathMapperScanner,通过反射机制载入注解bean到spring容器[/align]
[align=left] ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);[/align]
[align=left] scanner.setAddToConfig( this .addToConfig );[/align]
[align=left] scanner.setAnnotationClass( this .annotationClass );[/align]
[align=left] scanner.setMarkerInterface( this .markerInterface );[/align]
[align=left] scanner.setSqlSessionFactory( this .sqlSessionFactory );//不须要在xml中设置sqlSessionFactory以及sqlSessionTemplate[/align]
[align=left] scanner.setSqlSessionTemplate( this .sqlSessionTemplate );[/align]
[align=left] scanner.setSqlSessionFactoryBeanName( this .sqlSessionFactoryBeanName );[/align]
[align=left] scanner.setSqlSessionTemplateBeanName( this .sqlSessionTemplateBeanName );[/align]
[align=left] scanner.setResourceLoader( this .applicationContext );[/align]
[align=left] scanner.setBeanNameGenerator( this .nameGenerator );[/align]
[align=left] scanner.registerFilters();[/align]
[align=left] //真正自己主动化扫描的类[/align]
scanner.scan(StringUtils. tokenizeToStringArray( this. basePackage,
ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS ));
[align=left] }[/align]
孜孜不倦、厚积薄发。
----胡弦语录
相关文章推荐
- Mybatis结合Spring注解自动扫描源码分析
- Spring4.0MVC学习资料,注解自己主动扫描bean,自己主动注入bean(二)
- spring事务源码分析结合mybatis源码(一)
- springMVC和spring各自扫描自己的注解不要相互混淆
- spring 注解源码分析-扫描和读取bean定义
- spring事务源码分析结合mybatis源码(二)
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- MyBatis语言与spring结合编写sql语言(基于注解)
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- Spring源码分析【8】-MyBatis注解方法不能重载
- maven 项目(三) spring集成mybatis事务配置(扫描注解)
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- (转)Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- 初学SpringMVC+Mybatis之Spring基于注解的组件扫描
- Spring源码分析【4】-Spring扫描basePackages注解
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- 四、初学SpringMVC+Mybatis之Spring基于注解的组件扫描
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义