简介

背景

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之基础的更多相关文章

  1. 【SpringBoot】SpringBoot的基础,全面理解bean的生命周期

    前言 前段时间直接上手使用springboot开发了一个数据平台的后台部分,但是自身对于springboot的原理和过程还不是很清晰,所以反过来学习下springboot的基础. 大家都知道sprin ...

  2. SpringBoot之基础入门-专题一

    SpringBoot之基础入门-专题一 一.Spring介绍 1.1.SpringBoot简介 在初次学习Spring整合各个第三方框架构建项目的时候,往往会有一大堆的XML文件的配置,众多的dtd或 ...

  3. 从SpringBoot到SpringCloudAlibaba简明教程(一):初识SpringBoot及其基础项目构建

    前言 Spring框架的大名想必大家早已如雷贯耳,我们来看一下springboot诞生的初衷,以及它在springframe的基础上解决了哪些痛点. 很久以前,J2EE还是java企业级应用的标准规范 ...

  4. Spring入门(二):SpringBoot之基础Web开发

    接上回 现在,我们已经能自行完成SpringBoot的初级项目搭建了,接下来看如何实现一些Web开发中的基础功能. 先看项目完整的目录结构: 1. 返回Json数据 创建model文件夹,并新建Per ...

  5. SpringBoot入门基础

    目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...

  6. 使用vue+elementUI+springboot创建基础后台增删改查的管理页面--(1)

    目前这家公司前端用的是vue框架,由于在之前的公司很少涉及到前端内容,对其的了解也只是会使用js和jquery,所以..慢慢来吧. 在此之前需要先了解vue的大致语法和规则,可先前往官方文档进行学习h ...

  7. SpringBoot 之基础学习篇.

    一.概念简介 SpringBoot 的关键词是“约定俗成”,它根据长久以来的 Spring 开发配置经验,整理出一套适用.普遍.大家都认可的配置方案.所以 SpringBoot 的学习过程中心态一定要 ...

  8. 接口开发-基于SpringBoot创建基础框架

    说到接口开发,能想到的开发语言有很多种,像什么Java啊..NET啊.PHP啊.NodeJS啊,太多可以用.为什么选择Java,究其原因,最后只有一个解释,那就是“学Java的人多,人员招聘范围大,有 ...

  9. 补习系列(1)-springboot项目基础搭建课

    目录 前言 一.基础结构 二.添加代码 三.应用配置 四.日志配置 五.打包部署 小结 前言 springboot 最近火的不行,目前几乎已经是 spring 家族最耀眼的项目了.抛开微服务.技术社区 ...

随机推荐

  1. Java高级特性 第12节 XML技术

    一.XML简介 1. XML介绍 XML是可扩展标记语言(Extensible Markup Language ),XML是一种数据格式,类似 HTML,是使用标签进行内容描述的技术,与HTML不同的 ...

  2. EasyMall注册功能

    EasyMall注册功能 1. 环境搭建 创建一个EasyMall的web应用 配置www.easymall.com网站,并配置为缺省的虚拟主机,将EasyMall配 置为缺省的web应用,在配置in ...

  3. DevExpress中GridControl的使用笔记(转)

    转自:https://www.jianshu.com/p/badc1d2f0841 注:练习例子为: DxApplication1 -> XtraForm1 , 例子上传到本博中 2019.4. ...

  4. 图形化SVN管理搭建 subversion edge自行修改密码

    参考文章: https://blog.csdn.net/buyaore_wo/article/details/84313467 安装版本: Subversion Edge 5.2.3 (Linux 6 ...

  5. SourceInsight宏插件2(非常好用,强力推荐)

    Quicker宏在SI中的使用方法(下载地址:链接:https://pan.baidu.com/s/1VrDxlPhft7RPUCCOKxsGIg  提取码:2d4u) Quicker宏的添加到SI中 ...

  6. Wavelet Ridgelet Curvelet Contourlet Ripplet

    Ripplet: A New Transform for Image Processing Jun Xu, Lei Yang and Dapeng Wu Ripplet: A New Transfor ...

  7. squid 3.5 window x64

    下载1: https://download.csdn.net/download/runliuv/11131620 下载2: 链接: https://pan.baidu.com/s/1A_o_Xvg1y ...

  8. 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 ...

  9. 学习MeteoInfo二次开发教程(九)

    最终的MaskOut功能未能实现 另外,一个有用的,在指定位置显示图片: legend.MarkerType = MarkerType.Image; legend.ImagePath = " ...

  10. Linq to SQL -- Join

    Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), SelectM ...