SpringBoot之基础
简介
背景
J2EE笨重的开发 / 繁多的配置 / 低下的开发效率 / 复杂的部署流程 / 第三方技术集成难度大
特点
① 快速创建独立运行的spring项目以及主流框架集成
② 使用嵌入式的Servlet容器, 应用无需达成war包
③ starters自动依赖和版本控制
④ 大量自动配置, 简化开发, 也可修改默认值
⑤ 无需配置xml文件, 无代码生成, 开箱即用
⑥ 准生产环境的运行时应用监控
⑦ 与云计算的天然集成
微服务
推荐martinfowler的一篇博客译文: http://blog.cuicc.com/blog/2015/07/22/microservices/
微服务是一种架构风格, 一个应用应该是一组小型服务, 可以通过http的方式进行互通.
以前的架构: 单体应用(ALL IN ONE)
微服务(Microservices): 每一个服务都是可替代可升级的软件单元
每个服务之间通过http进行通信:
准备工作
JDK1.8
maven3.3.9
IDEA_2018
配置指定maven的全局JDK版本: 在setting.xml文件中的<profiles></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>
第一个例子
① 创建一个maven工程(jar)
② 导入spring boot相关的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.idea.springboot</groupId>
<artifactId>spring-boot-01-helloworld</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<!--将应用打包成一个可执行的jar包-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
③ 编写一个主程序, 启动Spring Boot应用
/**
* @Date 18/12/06/006 - 8:54
* @Desc springboot第一个例子
* @SpringBootApplication 标注一个主程序类 说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
④ 编写相关的Controller
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
⑤ 运行主程序测试, 访问: http://localhost:8080/hello
⑥ 简化部署(使用插件打成jar, 插件在pom文件中已给出)
探究
① pom文件
父项目:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</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的所有依赖版本: 导入依赖默认是不需要写上版本的(没有在dependencies管理中的除外)
② 导入的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter: Spring Boot的场景启动器
spring-boot-starter-web: 帮我们导入了web模块正常运行所依赖的组件
Spring Boot将所有的功能场景都抽取出来, 做成一个个的starter(启动器), 只需要在项目中引入这些starter, 要用哪个功能就导入具体的starter即可.
③ 主程序类/主入口类
@SpringBootApplication注解, 该注解所标准的类即为SpringBoot的主配置类
@SpringBootConfiguration
@Configuration: 配置类上的注解
@Component: 组件注解
配置类: 同配置文件的作用, 也是容器的组件.
@EbableAutoConfiguration: 开启自动注解功能
@AutoConfigurationPackage: 自动配置包(自动导包)
@Import({Registrar.class}): Spring的底层注解, 给容器中导入一个组件
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包的所有组件都扫描到容器中
@Import({ AutoConfigurationImportSelector.class}): 导入具体组件的选择器
将所有需要导入的组件以全类名的方式返回, 这些组件就会被添加到容器中.
会给容器中导入非常多的自动配置类(xxxAutoConfiguration): 给容器中导入这个场景需要组件并配置好这些组件.
有了自动配置类, 免去了手动编写配置注入功能组件的工作.
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, ClassLoader);
该方法从文件"META-INF/spring.factories"中获取自动配置的类信息.
小结: SpringBoot在启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值, 将这些值作为自动配置类导入到容器中, 自动配置类就会生效, 进行自动配置工作, 所以并不是不需要进行以前的配置, 只是这些配置都由SpringBoot帮我们完成了. J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
使用Spring Initializr快速创建SpringBoot项目(需要联网)
① 选择Spring Initializr
② 填写信息
③ 需要哪个模块勾选哪个即可
④ next->finish
⑤ resources文件夹中的目录结构
static文件夹: 保存所有的静态资源(js, css...);
templates文件夹: 保存所有的模板页面(由于SpringBoot使用嵌入式的tomcat, 所以默认不支持jsp), 可以使用模板引擎 (freemarker/ thymeleaf)
application.properties: SpringBoot应用的配置文件(可以修改一些默认的设置)
SpringBoot之基础的更多相关文章
- 【SpringBoot】SpringBoot的基础,全面理解bean的生命周期
前言 前段时间直接上手使用springboot开发了一个数据平台的后台部分,但是自身对于springboot的原理和过程还不是很清晰,所以反过来学习下springboot的基础. 大家都知道sprin ...
- SpringBoot之基础入门-专题一
SpringBoot之基础入门-专题一 一.Spring介绍 1.1.SpringBoot简介 在初次学习Spring整合各个第三方框架构建项目的时候,往往会有一大堆的XML文件的配置,众多的dtd或 ...
- 从SpringBoot到SpringCloudAlibaba简明教程(一):初识SpringBoot及其基础项目构建
前言 Spring框架的大名想必大家早已如雷贯耳,我们来看一下springboot诞生的初衷,以及它在springframe的基础上解决了哪些痛点. 很久以前,J2EE还是java企业级应用的标准规范 ...
- Spring入门(二):SpringBoot之基础Web开发
接上回 现在,我们已经能自行完成SpringBoot的初级项目搭建了,接下来看如何实现一些Web开发中的基础功能. 先看项目完整的目录结构: 1. 返回Json数据 创建model文件夹,并新建Per ...
- SpringBoot入门基础
目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...
- 使用vue+elementUI+springboot创建基础后台增删改查的管理页面--(1)
目前这家公司前端用的是vue框架,由于在之前的公司很少涉及到前端内容,对其的了解也只是会使用js和jquery,所以..慢慢来吧. 在此之前需要先了解vue的大致语法和规则,可先前往官方文档进行学习h ...
- SpringBoot 之基础学习篇.
一.概念简介 SpringBoot 的关键词是“约定俗成”,它根据长久以来的 Spring 开发配置经验,整理出一套适用.普遍.大家都认可的配置方案.所以 SpringBoot 的学习过程中心态一定要 ...
- 接口开发-基于SpringBoot创建基础框架
说到接口开发,能想到的开发语言有很多种,像什么Java啊..NET啊.PHP啊.NodeJS啊,太多可以用.为什么选择Java,究其原因,最后只有一个解释,那就是“学Java的人多,人员招聘范围大,有 ...
- 补习系列(1)-springboot项目基础搭建课
目录 前言 一.基础结构 二.添加代码 三.应用配置 四.日志配置 五.打包部署 小结 前言 springboot 最近火的不行,目前几乎已经是 spring 家族最耀眼的项目了.抛开微服务.技术社区 ...
随机推荐
- Java高级特性 第12节 XML技术
一.XML简介 1. XML介绍 XML是可扩展标记语言(Extensible Markup Language ),XML是一种数据格式,类似 HTML,是使用标签进行内容描述的技术,与HTML不同的 ...
- EasyMall注册功能
EasyMall注册功能 1. 环境搭建 创建一个EasyMall的web应用 配置www.easymall.com网站,并配置为缺省的虚拟主机,将EasyMall配 置为缺省的web应用,在配置in ...
- DevExpress中GridControl的使用笔记(转)
转自:https://www.jianshu.com/p/badc1d2f0841 注:练习例子为: DxApplication1 -> XtraForm1 , 例子上传到本博中 2019.4. ...
- 图形化SVN管理搭建 subversion edge自行修改密码
参考文章: https://blog.csdn.net/buyaore_wo/article/details/84313467 安装版本: Subversion Edge 5.2.3 (Linux 6 ...
- SourceInsight宏插件2(非常好用,强力推荐)
Quicker宏在SI中的使用方法(下载地址:链接:https://pan.baidu.com/s/1VrDxlPhft7RPUCCOKxsGIg 提取码:2d4u) Quicker宏的添加到SI中 ...
- Wavelet Ridgelet Curvelet Contourlet Ripplet
Ripplet: A New Transform for Image Processing Jun Xu, Lei Yang and Dapeng Wu Ripplet: A New Transfor ...
- squid 3.5 window x64
下载1: https://download.csdn.net/download/runliuv/11131620 下载2: 链接: https://pan.baidu.com/s/1A_o_Xvg1y ...
- C#使用AppDomain时的异常分析:Object ‘XXXX.rem’ has been disconnected or does not exist at the server.
在使用C#的应用程序域的时候,碰到这么一个异常: System.Runtime.Remoting.RemotingException: Object ‘/76e7cd41_2cd2_4e89_9c03 ...
- 学习MeteoInfo二次开发教程(九)
最终的MaskOut功能未能实现 另外,一个有用的,在指定位置显示图片: legend.MarkerType = MarkerType.Image; legend.ImagePath = " ...
- Linq to SQL -- Join
Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), SelectM ...