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机制的主要内容,如果未能解决你的问题,请参考以下文章
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段