Spring的历史

Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需

开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通

过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置, 而且是很多XML配置。

Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身 组件的显式XML配置。

Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式, 可以代替XML。

在Spring经历大规模的应用之后,开发人员逐渐总结出一套在开发应用时必须配置的样板,也就是SpringBoot。

SpringBoot可以理解为自己使用Spring配置好了基本框架后的成品,但这步已经交由SpringBoot完成了。SpringBoot的出现使开发人员可以更加专注于业务逻辑。

SpringBoot有一个理念叫做约定大于配置。当然,约定的前提是经历了大量的实践得出的。就好像常用的算法,设计模式一样,是一种经验的总结。

微服务和单体应用的宏观理解

微服务:一组小型应用通过HTTP的方式进行沟通的开发思想

单体应用:ALL IN ONE

单体应用的不足:

随着业务逻辑的不断更新和迭代开发,起初的小型应用会不断膨胀,当应用达到一定规模量时,敏捷开发和部署维护的效率就会举步维艰。也就是说,单体应用的可持续性能力较弱。

微服务的解决方案:

通过分解巨大的单体式应用使得可持续性开发和优化等扩展能力增强。

自由的开发技术选择。(不同组件的功能可以使用更加合适的技术实现)

微服务架构的不足:

微服务本身的分布式系统导致固有复杂性:组件之间消息传递的通讯成本。

迭代开发所遗留的耦合问题依然存在:在修改某一个服务时,其他与之相关的服务不可避免的也要相应修改,但较单体应用来说,业务逻辑更清晰,耦合度更低。

总结:相对来说,单体式开发更加适合简单轻量的应用,微服务虽然仍旧存在不足,但更适合构建复杂应用开发。

新的体会:

根据演化原则,微服务是单体应用在业务发展到一定规模的演化策略。微服务的出现并不是替换单体,而是在单体应用无法满足业务需求的情况下破局的一种解决方案。

【举个栗子】

  • 2003年4月,淘宝秘密起始于湖畔花园,购买了一个LAMP(Linux+Apache+MySQL+PHP)架构的网站。

  • (2008年后)服务化/中心化的业务系统架构

LAMP架构是最简单的架构,但是同时也是最合适当初淘宝的架构。在淘宝无人问津的时代,几个亿的并发量又有什么意义呢?最初的LAMP到使用Oracle数据库,经历重量级EJB框架的淘宝,最终实现服务化的架构模式。

技术的作用是实现业务,业务的发展才是技术革新的标准。

更多淘宝技术发展可参考:https://blog.csdn.net/wp1603710463/article/details/50166797


微服务架构是这个时代最火的技术,但却不是业务的起点。

反手一个HelloWorld

环境:JDK8

开发工具:Intellij IDEA

SpringBoot版本:2.1.8

Maven和Tomcat都是使用IDEA内置的。

使用Spring Initializr构建应用

  • 创建工程

选择web模块测试

  • 创建Controller测试

package zkrun.top.helloworld.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloController { @RequestMapping("/hello")
public String hello()
{
return "hello SpringBoot!";
}
}
  • 启动

关于RestController

关于POM

<?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 https://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>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>zkrun.top</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helloworld</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

parent版本仲裁

 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

spring-boot-starter-parent依赖的父项目spring-boot-dependencies定义了经常使用依赖的版本,所以在以后导入依赖通常是不需要写版本号的(除了一些特殊的没有被声明的包)

spring-boot-starter场景启动器

比如说web场景启动器包含了诸如Tomcat,webmvc等场景启动器

webmvc场景启动器又包含了beans,core,web等jar包

场景启动器是将开发时常用的jar包根据使用的场景进行了一次整合,使得开发更加的方便,快速。

【同时一定程度上解决了自己引用jar包导致的冲突,但也会导致jar包不可见性,使得开发者在熟悉底层原理的到路上越走越远,有利有弊吧】

@SpringBootApplication

@SpringBootApplication包含@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan等注解

@SpringBootConfiguration包含@Configuration

@Configuration包含@Component

@EnableAutoConfiguration开启自动配置包含

@AutoConfigurationPackage包含

将主配置类(@SpringBootApplication标注的类)的所在包及子包里面所有的组件扫描进IOC容器。

部署

找到jar所在目录

java -jar helloworld-0.0.1-SNAPSHOT.jar

nohup java -jar helloworld-0.0.1-SNAPSHOT.jar   //以后台方式运行

访问:http://localhost:8080/hello


SpringBoot——HelloWorld的更多相关文章

  1. spring boot 初试,springboot入门,springboot helloworld例子

    因为项目中使用了spring boot ,之前没接触过,所以写个helloworld玩玩看,当做springboot的一个入门例子.搜索 spring boot.得到官方地址:http://proje ...

  2. Springboot helloworld入门最经典例子

    一.建立maven java项目 导入springboot包 二.配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  3. 2.SpringBoot HelloWorld详解

    1.POM文件 父项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId> ...

  4. 五、SpringBoot—HelloWorld案例

    弱弱的补充一下啊,,,上一讲如果个别同学创建完项目之后发现项目pom.xml文件或者项目其他地方报错,你可以安装下图操作: HelloWorld案例: 编写好之后启动项目(贼姬霸简单) 启动成功: 浏 ...

  5. SpringBoot — HelloWorld开发部署

    springboot官方推荐使用jdk1.8 一.配置pom.xml 二.Application.java 三.HelloController.java 四.项目运行: Application.jav ...

  6. SpringBoot学习之Helloworld

    1. 如果使用Spring开发一个"HelloWorld"的web应用 创建一个web项目并且导入相关jar包.SpringMVC Servlet 创建一个web.xml 编写一个 ...

  7. SpringBoot的 HelloWorld

    SpringBoot HelloWorld 功能需求 ​ 浏览器发送hello请求,服务器接收请求并处理,相应HelloWorld字符串 1.创建一个maven工程:(jar) 2.导入SpringB ...

  8. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  9. springboot-01 helloworld

    第一个springboot程序 新建maven项目,添加如下依赖: <?xml version="1.0" encoding="UTF-8"?> & ...

随机推荐

  1. idea 新建不了servlet文件 方法(1)

    在pem.xml中添加较新版本的servletapi包 <dependency> <groupId>javax.servlet</groupId> <arti ...

  2. STM32实现Airplay音乐播放器

    AirPlay是苹果公司推出的一套无线音乐解决方案,我们手里的iPhone.iPad甚至是Apple Watch等设备还有电脑上的iTunes都支持AirPlay,但是支持AirPlay功能的音响设备 ...

  3. 微信小程序云开发报错解决: Setting data field "openid" to undefined is invalid.

    最近在学习微信小程序云开发,刚一开始就遇到了问题. 点击获取openid的时候控制台开始报错: [云函数] [login] user openid:  undefined VM97:1 Setting ...

  4. 认识Linux工具

    Centos7镜像网站:清华,阿里,网易 软件安装:lamp   httpd (认识) yum: 安装工具    需要选版本和特性,所以生产不用yum rpm:安装依赖 源码编译 shell脚本:yu ...

  5. SAP Special Fields in FAGLL03 transaction

    https://wiki.scn.sap.com/wiki/display/ERPFI/Special+Fields+in+FAGLL03+transaction https://wiki.scn.s ...

  6. 【模板】珂朵莉树(ODT)(Codeforces 896C Willem, Chtholly and Seniorious)

    题意简述 维护一个数列,支持区间加,区间赋值,区间求第k小,区间求幂和 数据随机 题解思路 ODT是一种基于std::set的暴力数据结构. 每个节点对应一段区间,该区间内的数都相等. 核心操作spl ...

  7. Raven 2 靶机渗透

    0X00 前言 Raven 2中一共有四个flag,Raven 2是一个中级boot2root VM.有四个标志要捕获.在多次破坏之后,Raven Security采取了额外措施来强化他们的网络服务器 ...

  8. 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)

    定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...

  9. springBoot框架分布式部署定时任务重复执行之解决方案

    问题描述: 在集群模式部署服务端时,会出现所有的定时任务在各自的节点处均会执行一遍,这显然不符合实际的开发场景,针对这种问题,本文给出一种springboot集成shedlock的解决方案 第一步:引 ...

  10. 记录一则AIX使用裸设备安装OracleRAC的问题

    需求背景:在AIX6.1上安装Oracle 10g RAC,一线工程师反馈节点2运行root脚本无法成功,跟进排查发现实际上底层存储磁盘的准备工作就存在问题. 客户要求底层存储选用裸设备方式,所以必须 ...