自定义框架类
简介
Mybatis原始的开发方式是配置SqlSessioinFactory,集成到Spring框架中还是需要配置,一个框架需要配置的东西太多了,所以Springboot应运而生,springboot只需要引入starter就行,框架会自动引入
本质上还是将需要的类注入spring容器中,如加载mybatis的自动配置类
作为框架的开发者,需要做的有:
- 一个现成的框架
- 基于框架创建自动配置
- 封装一个starter
自动配置和starter是针对已有框架进行的整合
自定义框架的注意事项
必备四角色:框架、自动配置模块、starter模块、开发者
-
定制自动配置必要内容
- autoconfiguration模块,包含自动配置代码。自定义hodor-spring-boot-autoconfigure。
- starter模块。自定义hodor-spring-boot-starter
-
自动配置命名方式
- 官方的Starters
- spring-boot-starter-*
- 非官方的starters
- *-spring-boot-starter
- 官方的Starters
-
SpringBoot起步依赖,Starter Dependencies
一些注意事项
- starter中仅添加必备依赖坐标
- 需要声明对spring-boot-autoconfigure的依赖
实现步骤
- 获取准备好的框架
- 创建 hodor-spring-boot-autoconfigure 模块
- 定义代码生成器核心对象的配置类信息
- 在META-INF/spring.factories扩展自动配置
- 创建 hodor-spring-boot-starter 模块
- 将自动配置模块及starter模块安装到本地仓库
- 测试模块springboot05-test-my-auto-configuration
- 引入自定义的 hodor-spring-boot-starter依赖坐标
- 测试核心代码生成器对象,是否自动配置成功了
实现过程
- starter就是一个pom文件
- 核心就是自动配置类和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>
<groupId>cn.hodor</groupId>
<artifactId>hodor_codeutils</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
public class CodeUtils {
public void generateCode(){
System.out.println("======您的代码已经生成======");
}
}
hodor-spring-boot-autoconfigure 模块
pom.xm
- 需要导入框架坐标和自动依赖坐标
<?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>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.1.11.RELEASE</version>
</parent>
<groupId>cn.hodor</groupId>
<artifactId>hodor-spring-boot-autoconfigure</artifactId>
<version>1.0-SNAPSHOT</version>
<!--导入自动配置的相关依赖坐标-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!--框架坐标-->
<dependency>
<groupId>cn.hodor</groupId>
<artifactId>hodor_codeutils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
配置信息在AHUProperties.java
@ConfigurationProperties(prefix = "spring.hodor")
public class AHUProperties {
private Integer id;
private String username;
private String password;
}
配置类AHUAutoConfiguration注意添加的注解
/**
* codeUtils的自动配置类
* 帮助注入CodeUtils对象,谁导入CodeUtils坐标就注入到哪里去
* @author :hodor007
* @date :Created in 2020/12/7
* @description :
* @version: 1.0
*/
@Configuration
@ConditionalOnClass(name = "cn.hodor.utils.CodeUtils") //hodor_codeutils包下面有这个类的时候配置类才有效
@Import(AHUProperties.class) //导入自定义的配置值,可以初始化到核心对象new CodeUtils中
public class AHUAutoConfiguration {
/**
* 可以使用配置控制是否注入
* 注入核心类到spring容器中
* havingValue 默认值时true
* matchIfMissing 设置value匹配的值,如果匹配条件生效,如果不匹配则不生效
* @return
*/
@Bean
@ConditionalOnProperty(name = "spring.hodor.enable", havingValue = "true", matchIfMissing = true)
public CodeUtils codeUtils(){
return new CodeUtils();
}
}
最后还需要在META-INF/spring.factories文件中配置接口的实现类名称,放入写好的自动配置类
创建 hodor-spring-boot-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>
<groupId>cn.hodor</groupId>
<artifactId>hodor-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--框架自动配置类坐标导入-->
<dependency>
<groupId>cn.hodor</groupId>
<artifactId>hodor-spring-boot-autoconfigure</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--框架坐标导入-->
<dependency>
<groupId>cn.hodor</groupId>
<artifactId>hodor_codeutils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
测试
导入启动类
<!--导入自定义的启动类-->
<dependency>
<groupId>cn.hodor</groupId>
<artifactId>hodor-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
启动引导类
@SpringBootApplication
public class Springboot05MyautoconfigurationApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Springboot05MyautoconfigurationApplication.class, args);
CodeUtils codeUtils = context.getBean(CodeUtils.class);
codeUtils.generateCode();
}
}