SpringBoot另一核心特性是Starter组件,Starter组件的出现极大简化了项目开发,例如在项目中使用的pom.xml文件下配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
SpringBoot就会自动关联web开发相关的依赖,如tomcat以及spring-webmvc等,进而对web开发进行支持,同时相关技术也将实现自动配置,避免了繁琐的配置文件。
Starter原理
Starter组件使开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由SpringBoot自动完成class类发现并加载需要的Bean。
利用starter实现自动化配置需要两个条件:Maven依赖、配置文件,Maven依赖实质上就是导入jar包,SpringBoot启动的时候会找到Starter组件jar包中的resources/META-INF/spring.factories文件,根据spring.factories文件中的配置,找到需要自动配置的类。
自定义Starter
我们了解SpringBoot Starter基本原理后,可以尝试自己手动编写一个Starter组件,具体步骤如下,以一个简单例子进行讲解说明。
1)构建独立的maven项目,命名如:sysuser-spring-boot-starter
2)添加spring相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
3)创建实体SysUser和属性配置文件SysUserProperties(@ConfigurationProperties)
public class SysUser {
private String loginname;
private String password;
public String getLoginname () {
return loginname;
}
public void setLoginname (String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
@ConfigurationProperties(prefix = "com.wf")
public class SysUserProperties {
private String loginname;
private String password;
public String getLoginname () {
return loginname;
}
public void setLoginname (String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4)编写自动配置类:
@Configuration
@EnableConfigurationProperties(value = {SysUserProperties.class})
public class SysUserInfoAutoConfiguration {
@Bean
public SysUser sysUser(SysUserProperties sysUserProperties) {
SysUser user = new SysUser ();
user.setLoginname(oceanliProperties. getLoginname());
user.setPassword(oceanliProperties.getPassword());
return user;
}
}
5)创建META-INFO/spring.factories文件,将自动配置类放入其中
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.wf.configuration.SysUserInfoAutoConfiguration
6)上述配置完毕后,打包发布jar包,starter组件开发完成。
v