springboot的配置文件:
application.properties和applicaion.yml两种。
yml配置文件的书写方式:
yml配置信息的获取方式:
1.自定义的配置信息:
@Value(${user.name})
@ConfigurationProperties
2.第三方技术配置信息:
spring整合mybatis:
1.引入mybatis的依赖和spring整合mybatis的依赖。
2.创建三个bean
springboot整合mybatis:
1.引入mybatis的起步依赖
2.配置数据库的相关信息。
第三方的配置信息一般由springboot自动读取,不需要我们编写代码去读取。
Bean的扫描:
Bean的注册:
1.自定义bean的注册只需要加入以下注解,并将这些类让springboot可以扫描到。2.第三方bean的注册。由于第三方的bean不能添加以上注解,所以需要另辟蹊径。
@Bean
在配置类中声明一个方法注入需要的bean,只需要创建一个方法使方法的返回值为bean对象。bean的名字默认为方法名。可以在@Bean中指定bean的名称。
如果方法的内部需要使用到ioc容器中已经存在的bean对象,那么只需要在方法的参数处声明即可,spring会自动注入。
@Import
1.导入配置类:使用@Import导入配置类不需要再添加@Configuration注解。
2.导入ImportSelector接口实现类(适用于导入多个配置类的方式)
自定义组合注解@EnableXxx注解,封装@Import注解。
再启动类上添加组合注解@EnableCommonConfig注解。
Bean的注册条件:
自动配置原理:
springboot项目引入mybatis的起步依赖后自动将SqlSessionFactoryBean和MapperScannerConfigurer和DataSource就自动注入到了IOC容器中。
源码分析:
程序引入web的启动依赖,启动后,会自动向IOC容器中注入DispatcherServlet
自定义starter:
mybatis的启动依赖都依赖哪些配置:
1.创建dmybatis-spring-boot-autoconfigure模块,创建MybatisAutoConfigure类实现自动配置,再resource下创建META-INF/spring/xxx.imports实现自动配置。
2.引入相关依赖:除了autoconfigure,因为我们要自定义自动配置。
创建自定义配置类。
@AutoConfiguration
public class MybatisAutoConfigure {
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory){
MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();
List<String> packages = AutoConfigurationPackages.get(beanFactory);
mapperScannerConfigurer.setBasePackage(packages.get(0));
mapperScannerConfigurer.setAnnotationClass(Mapper.class);
return mapperScannerConfigurer;
}
}
创建META-INF/spring/xxx.imports,拷贝MybatisAutoConfigure的全路径到xxx.imports文件中。
创建dmybatis-spring-boot-starter模块,引入dmybatis-spring-boot-autoconfigure依赖,和其他依赖。
<dependency>
<groupId>com.lihong</groupId>
<artifactId>dymybatis-spring-boot-autoconfigure</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>3.0.0</version>
</dependency>
3.将自定义starter依赖引入替换mybatis的起步依赖。
<!-- 自定义starter--> <dependency> <groupId>com.lihong</groupId> <artifactId>dmybatis-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
方式二:
创建配置类:MybatisConfiguration
@Configuration
public class MybatisConfiguration {
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory){
MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();
List<String> packages = AutoConfigurationPackages.get(beanFactory);
mapperScannerConfigurer.setBasePackage(packages.get(0));
mapperScannerConfigurer.setAnnotationClass(Mapper.class);
return mapperScannerConfigurer;
}
}
创建自动配置类MybatisAutoConfigure,导入Mybatisconfiguration将bean注册到ioc容器中。
@AutoConfiguration @Import(MybatisConfiguration.class) public class MybatisAutoConfigure { }