Mybatis结合Spring注解自动扫描源码分析
来源:互联网 发布:看懂运营数据的书籍 编辑:程序博客网 时间:2024/04/30 23:43
作为一个想做架构师的程序员,必须是一个优秀的程序员,在引入某一个框架的时候,必须要研究源码,将新的开源框架的风险变为可控性。
1.Spring结合Mybatis最常用的配置。
<!--理论加实践,才是架构师嘚最佳实践 -->
<!--JDBC Data Source -->
<bean id= "testdataSource"
class= "org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name= "driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<!-- <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
/> -->
<property name= "url" value="jdbc:oracle:thin:@192.168.137.101:1521:ora92" />
<property name= "username" value ="sale" />
<property name= "password" value ="sale" />
</bean>
<bean id= "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name= "dataSource" ref ="testdataSource" />
<property name= "mapperLocations">
<list>
<value> classpath:com/etrading /mapping/**/*Mapper.xml</ value>
</list>
</property>
<!-- <property name="typeAliasesPackage" value="com.nicchagil.mybatis3spring3intg.bean"
/> -->
</bean>
<bean class= "org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name= "basePackage"
value= "com/etrading/mapping/common;com/etrading/mapping/account" />
<property name= "sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
1)Spring为了整合Mybatis,专门封装了一个jar包(mybatis-spring-1.2.3.jar),其中MapperScannerConfigurer封装了自动扫描全局路径下的Mapper
2)MapperScannerConfigurer源码分析(基于mybatis-spring-1.2.3.jar)
其实要弄通源码,一定要弄通spring容器源码,这个是基础(理解框架设计的思想,其实很多代码思想是可以复用的)
简单的梳理下Spring容器思想:
Spring容器环境起来-->通过refresh()方法刷新容器(比较简洁)
MapperScannerConfigurer就是在刷新容器的过程中自动的执行方法postProcessBeanDefinitionRegistry
/**
* {@inheritDoc}
* 通过Spring容器触发postProcessBeanDefinitionRegistry
* @since 1.0.2
*/
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
if ( this. processPropertyPlaceHolders ) {
processPropertyPlaceHolders();
}
//核心处理类ClassPathMapperScanner,通过反射机制加载注解bean到spring容器
ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
scanner.setAddToConfig( this .addToConfig );
scanner.setAnnotationClass( this .annotationClass );
scanner.setMarkerInterface( this .markerInterface );
scanner.setSqlSessionFactory( this .sqlSessionFactory );//不需要在xml中设置sqlSessionFactory以及sqlSessionTemplate
scanner.setSqlSessionTemplate( this .sqlSessionTemplate );
scanner.setSqlSessionFactoryBeanName( this .sqlSessionFactoryBeanName );
scanner.setSqlSessionTemplateBeanName( this .sqlSessionTemplateBeanName );
scanner.setResourceLoader( this .applicationContext );
scanner.setBeanNameGenerator( this .nameGenerator );
scanner.registerFilters();
//真正自动化扫描的类
scanner.scan(StringUtils. tokenizeToStringArray( this. basePackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS ));
}
孜孜不倦、厚积薄发。
----胡弦语录
4 1
- Mybatis结合Spring注解自动扫描源码分析
- mybatis自动扫描注解
- SpringMVC+MyBatis + Spring自动扫描注解类的冲突问题
- Spring源码分析【4】-Spring扫描basePackages注解
- spring 注解源码分析-扫描和读取bean定义
- MyBatis自动扫描和自定义类注解
- Spring源码分析【8】-MyBatis注解方法不能重载
- mybatis-Spring ClassPathMapperScanner源码分析(自定义注解加载Bean)
- SpringMVC+MyBatis - 7 Spring自动扫描注解类的冲突问题
- SpringMVC+MyBatis - 7 Spring自动扫描注解类的冲突问题
- SpringMVC+MyBatis - 7 Spring自动扫描注解类的冲突问题
- spring bean自动扫描分析
- spring bean自动扫描分析
- mybatis源码分析-注解-1
- Spring常用注解,自动扫描装配Bean
- Spring常用注解,自动扫描装配Bean
- Spring常用注解,自动扫描装配Bean
- Spring常用注解,自动扫描bean
- Ural 2018. The Debut Album
- [LeetCode] Fraction to Recurring Decimal
- DT大数据梦工厂 温故而知新 之17讲
- 使用jsoup爬虫抓取页面
- Windows下mysql自动备份的最佳方案
- Mybatis结合Spring注解自动扫描源码分析
- Scala模式匹配下的赋值语句
- 浅谈LInux线程
- 【LeetCode-面试算法经典-Java实现】【073-Climbing Stairs(爬楼梯)】
- cas工作原理解析
- 【LeetCode-面试算法经典-Java实现】【078-Subsets(子集)】
- 【LeetCode-面试算法经典-Java实现】【079-Word Search(单词搜索)】
- 2015百度校招面试题
- 什么是数据库事务(what is database transaction)?