SpringBoot的starter到底是什么?( 四 )

这个类就是一个Configuration(配置类),它里面定义很多bean,其中最重要的就是SqlSessionFactory的bean实例,该实例是Mybatis的核心功能,用它创建SqlSession,对数据库进行CRUD操作 。
除此之外,MybatisAutoConfiguration类还包含了:

  • @ConditionalOnClass 配置了只有包含SqlSessionFactory.class和SqlSessionFactoryBean.class,该配置类才生效 。
  • @ConditionalOnBean 配置了只有包含dataSource实例时,该配置类才生效 。
  • @EnableConfigurationProperties 该注解会自动填充MybatisProperties实例中的属性 。
  • AutoConfigureAfter 配置了该配置类在DataSourceAutoConfiguration类之后自动配置 。
这些注解都是一些辅助功能,决定Configuration是否生效,当然这些注解不是必须的 。
接下来,重点看看spring.factories文件有啥内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration里面只有一行配置,即keyEnableAutoConfigurationvalueMybatisAutoConfiguration
好了,介绍了这么多东西,现在我们来总结一下,
starter几个要素如下图所示:
SpringBoot的starter到底是什么?

文章插图
那么,编写starter需要哪些步骤?
  • 1.需要定义一个名称为xxx-spring-boot-starter的空项目,里面不包含任何代码,可以有pom.xml和pom.properties文件 。
  • 2.pom.xml文件中包含了名称为xxx-spring-boot-autoconfigure的项目 。
  • 3.xxx-spring-boot-autoconfigure项目中包含了名称为xxxAutoConfiguration的类,该类可以定义一些bean实例 。当然,Configuration类上可以打一些如:ConditionalOnClass、ConditionalOnBean、EnableConfigurationProperties等注解 。
  • 4.需要在spring.factories文件中增加key为EnableAutoConfiguration,value为xxxAutoConfiguration 。
我们试着按照这四步,自己编写一个starter看看能否成功,验证一下总结的内容是否正确 。
3 如何定义自己的starter?3.1 先创建一个空项目该项目名称为id-generate-starter,注意为了方便我把项目重命名了,原本应该是叫id-generate-spring-boot-starter的,如下图所示:
SpringBoot的starter到底是什么?

文章插图
pom.xml文件定义如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><version>1.3.1</version><groupId>com.sue</groupId><artifactId>id-generate-spring-boot-starter</artifactId><name>id-generate-spring-boot-starter</name><dependencies><dependency><groupId>com.sue</groupId><artifactId>id-generate-spring-boot-autoconfigure</artifactId><version>1.3.1</version></dependency></dependencies></project>我们看到,它只引入了id-generate-spring-boot-autoconfigure 。当然如果有需要这里还可以引入多个autoconfigure或者多个其他jar包或者 。
3.2 创建id-generate-autoconfigure同样为了方便我把项目重命名了,原本是叫id-generate-spring-boot-autoconfigure,如下图所示:
SpringBoot的starter到底是什么?

文章插图
该项目当中包含:pom.xml、spring.factories、IdGenerateAutoConfiguration、IdGenerateService 和 IdProperties 这5个关键文件,下面我们逐一看看 。
先从pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version></parent><modelVersion>4.0.0</modelVersion><version>1.3.1</version><groupId>com.sue</groupId><artifactId>id-generate-spring-boot-autoconfigure</artifactId><name>id-generate-spring-boot-autoconfigure</name><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>

经验总结扩展阅读