自定义starter
实际场景:定义公共组件,封装为SpringBoot的starter
- 自定义mybatis的starter
1.步骤:创建dmybatis-spring-boot-autoconfigure模块,提供自动配置功能,并自定义配置文件META-INF/spring/xxx.imports
2.IDEA的Project Structure新建Modules,Archetype选择quickstart
- 操作dmybatis-spring-boot-autoconfigure
pom.xml文件引入依赖
- 创建新的包config,新建MyBatisAutoConfig类
@AutoConfiguration
public class MybatisAutoConfig {
//SqlSessionFactoryBean
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
//SqlSession是会话对象,用于连接数据库
//要连接指定的数据库,在方法上声明对应类型的参数DataSource
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
//dataSource注入到sqlSessionFactoryBean里,让它知道连接谁
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
//最后在方法上添加@Bean注解
}
//MapperScannerConfigure
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory){
//MapperScanner是用于Mapper扫描的,要告诉它扫描哪个包以及扫描哪个注解
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
//扫描的包:启动类所在的包及其子包
//get()方法需要传入一个BeanFactory,先在方法上声明
//返回一个集合
List<String> packages = AutoConfigurationPackages.get(beanFactory);
//调用packages的get方法
String p = packages.get(0);
//再调用mapperScannerConfigurer的set方法就设置好了
mapperScannerConfigurer.setBasePackage(p);
//扫描的注解
mapperScannerConfigurer.setAnnotationClass(Mapper.class);
return mapperScannerConfigurer;
//最后在方法上添加@Bean注解
}
}
- main下新建resource文件夹
在resource文件夹下新建META-INF文件夹,META-INF文件夹下新建spring文件夹
新建文件org.springframework.boot.autoconfigure.AutoConfiguration.imports
里面填写MyBatisAutoConfig(自动配置类)的全类名
- 操作dmabatis-spring-boot-starter文件
pom.xml中引入刚写好的
写好的两个maven可以只保留以下的文件
把原本的mybatis的起步依赖换成刚才自定义的起步依赖
出现java版本不支持的错误
此时需要在autoconfigure以及starter的pom.xml文件中添加
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<source>17</source>
</configuration>
</plugin>
</plugins>
</build>