四大核心
1、starter:jar包的引入,解决jar版本冲突问题
2、自动装配:简单配置甚至零配置即可运行项目
3、actuator:springboot程序监控器
4、CLI:命令行
starter
starter的命名有一种习惯,官方的starter一般都是spring-boot-starter-xxx,而我们自定义的starter一般都是xxx-spring-boot-starter。
首先我们需要明白一件事,就是我们自定义的bean是可以自动装配过来的,而我们第三方自定义的starter是如何被componentScan扫描到的呢,其实有一个约定,就是在resources下创建一个META-INF目录,在该目录下创建一个spring.factories文件,然后在该文件下说明哪些类下是你的bean。
org.springframework.boot.autoconfigure.EnableAutoConfiguration
创建一个普通的springboot项目
我这里命名为hzy-spring-boot-starter
,当你创建好之后,可以把启动类删了,因为我做依赖一般都是被其他项目引入的,所以留着也没用,然后需要引入两个依赖
<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>
引入之后,我们可以定义一个service,里面可以写我们的业务代码。
public class HzyService {
public String getHelloWorld() {
return "hello world";
}
}
然后就是定义一个配置类,这里命名为AutoConfig,用来将我们的service注入到IoC容器中
@Configuration
public class AutoConfig {
@Bean
public HzyService hzyService() {
return new HzyService();
}
}
然后就是最重要的一步了,让我们的配置类能被扫描到,在Spring中,约定大于配置,约定了我们在resources下创建一个META-INF的目录,里面写一个spring.factories文件,配置上路径即可。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.hzy.AutoConfig
最后的最后就是将这个项目打包到我们本地的maven仓库了,执行下面的命令即可。
mvn clean install -Dmaven.test.skip=true
最后,像引入其他依赖一样,引入该依赖就可以了,里面那个HzyService,可以直接通过自动装配创建对象。
@Autowired
private HzyService hzyService;
至此,自定starter就结束了,是不是很简单,如果世界这么简单就好了。。。
配置文件
我们在写一些官方的配置的时候,可能会发现,当我们写了一个前缀,后面会有一些提示,重要的是,我们的配置能够生效,这是怎么做到的呢?
其实是通过一个@ConfigurationProperties注解实现的,通过配置前缀,它可以进行扫描到你的配置。
@ConfigurationProperties(prefix = "hzy")
public class HzyProperties {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这样一个简单的配置,我们就可以在引入该jar的项目中进行配置了,如果不配置的话,name属性为null。
此时我们修改我们的Service类,把该配置引进来。
public class HzyService {
@Autowired
private HzyProperties hzyProperties;
public String getHelloWorld() {
return "hello world: " + hzyProperties.getName();
}
}
另外,我们还需要修改我们的自动装配类,通过@Import注解,将该类提前注入到IoC容器。
@Configuration
@Import(HzyProperties.class)
public class AutoConfig {
@Bean
public HzyService hzyService() {
return new HzyService();
}
}
当我们引入了该依赖之后,会有提示了,配置一下name,再次运行
可以看到,配置已生效,好了,今天的分享就到这里了。