spring-boot-starter机制

Posted 我爱看明朝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-boot-starter机制相关的知识,希望对你有一定的参考价值。

spring-boot-starter机制

starter是什么

在了解spring-boot-starter是什么前,我们先回忆一下,最开始我们使用spring,spring mvc时是怎么和其他组件进行整合的呢?
没错,我们要配置很多模板xml文件,而且对新手不熟悉不注意那里配错了,排错就会花掉很多时间,
没有做过上面整合的同学可以看我这篇博客 (搭建 spring + spring mvc +mybatis web项目)[https://blog.csdn.net/u013565163/article/details/52831332]
如果我们每次做新项目都要把上面的走一遍,即使你做了一个模板,还是要涉及到改很多配置(包名变了等等),还记得"don’t repeat yourself"原则吗
spring-boot-starter就是为了把上面的步骤上省略掉:约定大于配置,使用starter你只需要在application.properties中按照约定配置好参数就可以了。

你可以理解为就是一个帮助你的脚手架:
1. 不用直接管理组件相关的依赖包
2. 减少xml的大量模板配置

怎么创建自己的starter

创建一个maven项目

pom.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>


4.0.0
demo-starter
0.0.1-SNAPSHOT

<!-- 自定义starter都应该继承自该依赖 -->
<!-- 如果自定义starter本身需要继承其它的依赖,可以参考 https://stackoverflow.com/a/21318359 解决 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

<dependencies>
    <!-- 自定义starter依赖此jar包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- lombok用于自动生成get、set方法 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>

    <!-- 如果你还还有其他的依赖继续这里加-->
</dependencies>

 ### 创建一个ConfigurationProperties来保存你的配置

```java
    @Configuration
    //属性默认前缀
@ConfigurationProperties(
    prefix = "demo"
)
//从这个资源文件读
@PropertySource({"classpath:demo-default.properties"})
@Data
public class DemoProperties {
    //demo.timeouts默认值
    private long timeouts = 3000L;
   
    public DemoProperties() {
    }

自动加载配置信息,加载到spring容器

@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({DemoProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class DemoConfig {
     @Autowired
    private DemoProperties demoProperties;


   @PostConstruct
    public void configDruid() {
        // 处理加载配置后的逻辑
        system.out.print(demoProperties.getTimeouts());
    }
}

@ConditionalOnClass:当类能找到才执行配置处理器
@ConditionalOnBean:当bean在spring容器中,才执行配置处理器
@AutoConfigureAfter:当这个注解里的类,加载完成后才能加载当前配置
@EnableConfigurationProperties:使@ConfigurationProperties注解的类生效

为什么实践都是stater包加autoconfigure

当组件依赖其他组件时便于管理插拔。
这是官方建议的风格,便于把大功能分解成不同的模块,每个模块有自己的autoconfig,最终汇集到一个starter

(spring-boot-starter官方list)[https://github.com/spring-projects/spring-boot/tree/v1.5.7.RELEASE/spring-boot-starters]
(关与 @EnableConfigurationProperties 注解)[https://www.jianshu.com/p/7f54da1cb2eb]

https://stackoverflow.com/a/21318359
https://www.cnblogs.com/tjudzj/p/8758391.html

以上是关于spring-boot-starter机制的主要内容,如果未能解决你的问题,请参考以下文章

异常和TCP通讯

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段

如何向 ViewPager 提供许多片段并避免错误代码?

图解 Google V8 # 05:函数表达式的底层工作机制

SpringBoot的Starter机制