一, Spring Boot 入门
1,Spring Boot 简介
简化 Spring 应用开发的一个框架;
整个 Spring 技术栈的一个大整合;
J2EE 开发的一站式解决方案;
2, 微服务
2014,martin fowler
微服务: 架构风格(服务微化)
一个应用应该是一组小型服务; 可以通过 HTTP 的方式进行互通;
单体应用: ALL IN ONE
微服务: 每一个功能元素最终都是一个可独立替换和独立升级的软件单元;
详细参照微服务文档
3, 环境准备
环境约束
-jdk1.8:Spring Boot 推荐 jdk1.7 及以上; java version "1.8.0_112"
-maven3.x:maven 3.3 以上版本; Apache Maven 3.3.9
- -IntelliJIDEA2017:IntelliJ IDEA 2017.2.2 x64,STS
- -SpringBoot 1.5.9.RELEASE:1.5.9;
统一环境;
1,MAVEN 设置;
给 maven 的 settings.xml 配置文件的 profiles 标签添加
- <profile>
- <id>jdk-1.8</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <jdk>1.8</jdk>
- </activation>
- <properties>
- <maven.compiler.source>1.8</maven.compiler.source>
- <maven.compiler.target>1.8</maven.compiler.target>
- <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
- </properties>
- </profile>
2,IDEA 设置
整合 maven 进来;
4,Spring Boot HelloWorld
一个功能:
浏览器发送 hello 请求, 服务器接受请求并处理, 响应 Hello World 字符串;
1, 创建一个 maven 工程;(jar)
2, 导入 spring boot 相关的依赖
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.9.RELEASE</version>
- </parent>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- </dependencies>
3, 编写一个主程序; 启动 Spring Boot 应用
- /**
- * @SpringBootApplication 来标注一个主程序类, 说明这是一个 Spring Boot 应用
- */
- @SpringBootApplication
- public class HelloWorldMainApplication {
- public static void main(String[] args) {
- // Spring 应用启动起来
- SpringApplication.run(HelloWorldMainApplication.class,args);
- }
- }
4, 编写相关的 Controller,Service
- @Controller
- public class HelloController {
- @ResponseBody
- @RequestMapping("/hello")
- public String hello(){
- return "Hello World!";
- }
- }
5, 运行主程序测试
6, 简化部署
- <!-- 这个插件, 可以将应用打包成一个可执行的 jar 包;-->
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
将这个应用打成 jar 包, 直接使用 java -jar 的命令进行执行;
5,Hello World 探究
1,POM 文件
1, 父项目
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.9.RELEASE</version>
- </parent>
他的父项目是
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>1.5.9.RELEASE</version>
- <relativePath>../../spring-boot-dependencies</relativePath>
- </parent>
他来真正管理 Spring Boot 应用里面的所有依赖版本;
Spring Boot 的版本仲裁中心;
以后我们导入依赖默认是不需要写版本;(没有在 dependencies 里面管理的依赖自然需要声明版本号)
2, 启动器
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- spring-boot-starter-web:
spring-boot-starter:spring-boot 场景启动器; 帮我们导入了 web 模块正常运行所依赖的组件;
Spring Boot 将所有的功能场景都抽取出来, 做成一个个的 starters(启动器), 只需要在项目里面引入这些 starter 相关场景的所有依赖都会导入进来. 要用什么功能就导入什么场景的启动器
2, 主程序类, 主入口类
- /**
- * @SpringBootApplication 来标注一个主程序类, 说明这是一个 Spring Boot 应用
- */
- @SpringBootApplication
- public class HelloWorldMainApplication {
- public static void main(String[] args) {
- // Spring 应用启动起来
- SpringApplication.run(HelloWorldMainApplication.class,args);
- }
- }
@SpringBootApplication: Spring Boot 应用标注在某个类上说明这个类是 SpringBoot 的主配置类, SpringBoot 就应该运行这个类的 main 方法来启动 SpringBoot 应用;
- @Target(ElementType.TYPE)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan(excludeFilters = {
- @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
- @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
- public @interface SpringBootApplication {
@SpringBootConfiguration:Spring Boot 的配置类;
标注在某个类上, 表示这是一个 Spring Boot 的配置类;
@Configuration: 配置类上来标注这个注解;
配置类 ----- 配置文件; 配置类也是容器中的一个组件;@Component
@EnableAutoConfiguration: 开启自动配置功能;
以前我们需要配置的东西, Spring Boot 帮我们自动配置;
@EnableAutoConfiguration 告诉 SpringBoot 开启自动配置功能; 这样自动配置才能生效;
- @AutoConfigurationPackage
- @Import(EnableAutoConfigurationImportSelector.class)
- public @interface EnableAutoConfiguration {
@AutoConfigurationPackage: 自动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring 的底层注解 @Import, 给容器中导入一个组件; 导入的组件由 AutoConfigurationPackages.Registrar.class;
== 将主配置类 (@SpringBootApplication 标注的类) 的所在包及下面所有子包里面的所有组件扫描到 Spring 容器;==
@Import(EnableAutoConfigurationImportSelector.class);
给容器中导入组件?
EnableAutoConfigurationImportSelector: 导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回; 这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration); 就是给容器中导入这个场景需要的所有组件, 并配置好这些组件;! 自动配置类
有了自动配置类, 免去了我们手动编写配置注入功能组件等的工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot 在启动的时候从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值, 将这些值作为自动配置类导入到容器中, 自动配置类就生效, 帮我们进行自动配置工作; 以前我们需要自己配置的东西, 自动配置类都帮我们;
J2EE 的整体整合解决方案和自动配置都在 spring-boot-autoconfigure-1.5.9.RELEASE.jar;
6, 使用 Spring Initializer 快速创建 Spring Boot 项目
1,IDEA: 使用 Spring Initializer 快速创建项目
IDE 都支持使用 Spring 的项目创建向导快速创建一个 Spring Boot 项目;
选择我们需要的模块; 向导会联网创建 Spring Boot 项目;
默认生成的 Spring Boot 项目;
主程序已经生成好了, 我们只需要我们自己的逻辑
resources 文件夹中目录结构
static: 保存所有的静态资源; js CSS images;
templates: 保存所有的模板页面;(Spring Boot 默认 jar 包使用嵌入式的 Tomcat, 默认不支持 JSP 页面); 可以使用模板引擎(freemarker,thymeleaf);
application.properties:Spring Boot 应用的配置文件; 可以修改一些默认设置;
2,STS 使用 Spring Starter Project 快速创建项目
来源: https://www.cnblogs.com/xieyupeng/p/9660957.html