序言:
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 源码的了。有兴趣的可以自行查找。