mybatis加載過程

1、spi ->spring.factories->MybatisAutoConfiguration

2、@Bean->sqlSessionFactory(DataSource dataSource)->factory.getObject()->afterPropertiesSet()->buildSqlSessionFactory()->xmlMapperBuilder.parse()->configurationElement(parser.evalNode("/mapper")):解析mapper.xml

3、@Import(AutoConfiguredMapperScannerRegistrar.class)->AutoConfiguredMapperScannerRegistrar->registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)->registry.registerBeanDefinition(MapperScannerConfigurer.class.getName(), builder.getBeanDefinition())

4、MapperScannerConfigurer->postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)->scanner.scan():生成mapper代理,通過factoryBean實現

(4.1) scanner.scan()->doScan(basePackages)->super.doScan(basePackages)->registerBeanDefinition(definitionHolder, this.registry)->registry.registerBeanDefinition() 
scanner.scan()->doScan(basePackages)-> processBeanDefinitions(beanDefinitions)->definition.setBeanClass(this.mapperFactoryBeanClass):MapperFactoryBean.class
(4.2) MapperFactoryBean->getObject()->getSqlSession().getMapper(this.mapperInterface)->getConfiguration().getMapper(type, this)->mapperRegistry.getMapper(type, sqlSession)
(4.3) MapperRegistry->getMapper(Class<T> type, SqlSession sqlSession)->mapperProxyFactory.newInstance(sqlSession)->
MapperProxyFactory->newInstance(SqlSession sqlSession)->newInstance(mapperProxy)->Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy)
(4.4) MapperProxy->invoke(Object proxy, Method method, Object[] args)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章