java扫描注解_Mybatis结合Spring注解自动扫描源码分析

作为一个想做架构师的程序员,必须是一个优秀的程序员,在引入某一个框架的时候,必须要研究源码,将新的开源框架的风险变为可控性。

1.Spring结合Mybatis最常用的配置。

<

bean

id

=

“testdataSource”

class

=

“org.springframework.jdbc.datasource.DriverManagerDataSource”

<

property

name

=

“driverClassName”

value

=

“oracle.jdbc.driver.OracleDriver”

/>

/> –>

<

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

/> –>

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

));

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值