序言:
springboot框架价值,可以简单快速的构建独立的spring生产级别应用。springboot主要有以下的特性:
- 1?创建独立的Spring应用
- 2?直接嵌入Tomcat?等Web容器(不需要部署WAR文件)
- 3?提供固化的“starter”依赖,简化构建配置
- 4?当条码满足时自动装配Spring?货第三方类库
- 5?提供运维的特性,如指标信息,健康检查和外部配置
- 6?不需要XML配置。
下面就以spring?boot启动的时候,是如何实现mybatis?自动装配。
1?从程序的使用去入手分析
- ? 引入mybatis的starter依赖和相关的数据库驱动
????? <dependency>
? ? ? ? ? ? <groupId>org.mybatis.spring.boot</groupId>
? ? ? ? ? ? <artifactId>mybatis-spring-boot-starter</artifactId>
? ? ? ? ? ? <version>2.2.0</version>
? ? ? </dependency>
//程序的启动类
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
//服务类
@Service
public interface UserService {
@Autowired
private UserXmlMapper userXmlMapper;
@Test
public void testFindAll2() {
List<User> list = userXmlMapper.findAll();
System.out.println(list);
}
}
//Dao 操作
@Mapper
public interface UserXmlMapper {
public List<User> findAll();
}
上面的代码,大家都是很熟悉的,springboot是如何实现 @Mapper的注解,就可以操作数据库呢(就是中间有个桥梁,如何将springboot和mybatis连接起来的,而这个桥梁是如何实现的呢)
?通过源码可以知晓?
桥梁 =?@SpringBootApplication=>@EnableAutoConfiguration=>@Import({AutoConfigurationImportSelector.class})
分析源码可知AutoConfigurationImportSelector的主要作用?
- 扫描classpath下所有的jar包
- 在META-INF/spring.factories配置好的AutoConfiguration
- 扫描出来需要执行的AutoConfguration
回想再使用mybatis的时候,是需要引入mybatis的starter依赖包的,再结合AutoConfigurationImportSelector的第二点功能,可以到对应的jar下找到mybatis的AutoConfguration。
?也就是说spring-boot启动【会创建个spring容器】的时候,会去执行?MybatisAutoConfiguration的逻辑【处理?@Mapper?的类(扫描出来注入到srping?容器)和数据库连接等功能】。
关于MybatisAutoConfiguration的具体功能的逻辑,这块是设计到spring?源码的了。有兴趣的可以自行查找。
|