京东自营 618 + 国补 iPhone 历史最低价          领 618 红包,最高25618元

Spring Boot 四大核心之 starter——自定义 starter

四大核心

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,再次运行可以看到 hello world ,配置已生效,好了,今天的分享就到这里了。

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java