博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis结合Spring注解自己主动扫描源代码分析
阅读量:6609 次
发布时间:2019-06-24

本文共 2752 字,大约阅读时间需要 9 分钟。

作为一个想做架构师的程序猿,必须是一个优秀的程序猿。在引入某一个框架的时候,必需要研究源代码,将新的开源框架的风险变为可控性。
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 
));
  }

孜孜不倦、厚积薄发。
                           ----胡弦语录

转载地址:http://pniso.baihongyu.com/

你可能感兴趣的文章
VUE2中axios的使用方法
查看>>
CS 229 notes Supervised Learning
查看>>
2018.10.27-dtoj-3996-Lesson5!(johnny)
查看>>
DataTable转换成json字符串
查看>>
ubuntu 12.04 安装 redis
查看>>
【DM642】ICELL Interface—Cells as Algorithm Containers
查看>>
力扣算法题—085最大矩阵
查看>>
svs 在创建的时候 上传文件夹 bin obj 这些不要提交
查看>>
Tinkphp
查看>>
How to temporally disable IDE tools (load manually)
查看>>
Vue.js学习 Item4 -- 数据双向绑定
查看>>
几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)
查看>>
图片存储类型的种类、特点、区别
查看>>
GETTING UP AND RUNNING WITH NODE.JS, EXPRESS, JADE, AND MONGODB
查看>>
MySQLs数据库建外键时自动跑到缩影处,真奇怪
查看>>
static关键字
查看>>
js 合并多个对象 Object.assign
查看>>
Java 反射机制
查看>>
temporary Object and destructor
查看>>
xcode - 移动手势
查看>>