集合

01【熟悉】spring的发展

1,Spring1.x时代

在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。

2,Spring2.x时代

随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。

那么,问题来了,究竟是应该使用xml还是注解呢?

3,注解还是XML

在spring早期版本中,由于当时的JDK并不支持注解,因此只能使用XML的配置,很快,随着JDK升级到JDK5之后,它加入了注解的新特性,这样注解就被广泛地使用起来, 于是spring内部也分为两派,一派是使用XML的,一派是使用注解的,为了简化开发,在spring2.X之后的版本也引入了注解,不过是少量的注解,如@Component @Service等,但是功能还是不强大,因此对于srping的开发,大部分情况下还是使用XML为主,随着注解的增加,尤其是Servlet3.0之后,WEB容器可以脱离web.xml的部署,使用得WEB容器完全可以基于注解开发,对于spring3和spring4的版本注解功能越来越强大。对于XML的依赖起来越少,到了4.0完全可以脱离XML, 所以在spring中使用注解开发占据了主流地位,近年来。微服务的流行,越来越多的企业要求快速开发,所以spring Boot更加兴旺了。

1、应用的基本配置用xml,比如:数据源、资源文件等;

2、业务开发用注解,比如:Service中注入bean等;

4,Spring3.x到Spring4.x

从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Springboot都推荐使用java配置的方式。

5,SpringBoot的优点

1,创建独立的spring应用程序。

2,嵌入的tomcat jetty 或者undertow 不用部署WAR文件。

3,允许通过Maven来根据需要获取starter

4,尽可能的使用自动配置spring

5,提供生产就绪功能,如指标,健康检查和外部配置

6,绝对没有代码生成,对XML没有要求配置

02【熟悉】springboot和微服务的介绍

1,springboot简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。

该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapidapplication development)成为领导者。

2,为什么用springboot

创建独立的 Spring 应用程序

嵌入的 Tomcat,无需部署 WAR 文件

简化 Maven 配置

自动配置 Spring

提供生产就绪型功能,如指标,健康检查和外部配置

开箱即用,没有代码生成,也无需 XML 配置。

与云计算天然集成

3,特性理解

为基于 Spring 的开发提供更快的入门体验

开箱即用,没有代码生成,也无需 XML 配置。同时也可以修改默认值来满足特定的需求。

提供了一些大型项目中常见的非功能特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。

Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

4,传统开发模式

所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。

image.png

优点:

①开发简单,集中式管理

②基本不会重复开发

③功能都在本地,没有分布式的管理和调用消耗

缺点:

1、效率低:开发都在同一个项目改代码,相互等待,冲突不断

2、维护难:代码功功能耦合在一起,新人不知道何从下手

3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时

4、稳定性差:一个微小的问题,都可能导致整个应用挂掉

5、扩展性不够:无法满足高并发下的业务需求

6、对服务器的性能要求要统一,要高

5,微服务开发

微服务:架构风格(服务微化)

    微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通信机制,可以部署在单个或多个服务器上,微服务也指一种松耦合的,有一定有界上下文的**面向服务的架构**       

目的:有效的拆分应用,实现敏捷开发和部署

image.png

优点

1,每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求

2,微服务能够被小团队开发,这个小团队2-5人就可以完成了

3,微服务是松耦合的,是有功能,有意义的服务,无论在开发阶段或部署阶段都是独立的

4,微服务可以使用不同的语言开发

5,微服务能部署在中低端配置的服务器上

6,很容易和第三方集成

7,每个服务都有自己的存储能力,单独的库,也可以有统一的库

缺点

1,微服务会带来过多的操作

2,可以有双倍的努力 

4,分布式系统可能复杂难管理

5,分布跟踪部署难

6,当服务数量增加时,管理复杂度增加

03【掌握】入门程序

环境要求

①JDK1.8

②maven3.x

③spring tools suite3.9

④springboot2.x版本

⑤spring5

创建项目

方式1

https://start.spring.io/

image.png
image.png
image.png

再生成

在直接导入到idea 当中即可 导入还不会的话 就别学了!!!!!

方式2

image.png
image.png
image.png

选中需要的依赖包

image.png

项目目录说明

image.png

Resource/static/ 存放web的静态资源文件 如图片 css js 等等

Resources/templates 存放模板引擎的文件类比于WEB项目的WEB-INF

Application.properties boot的核心配置文件

Test/java/APPlicationTests.java 测试文件

项目依赖说明

<?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.2.0.RELEASE</version>

  <relativePath/>  <!-- lookup parent from repository -->

  </parent>

  <!-- 当前项目的GAV坐标 -->

  <groupId>com.sxt</groupId>

  <artifactId>01_springboot_hello</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <name>01_springboot_hello</name>

  <description>我的第一个<u>springboot</u>程序</description>

  <properties>

  <java.version>1.8</java.version>

 <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>

  </properties>

  <dependencies>

  <!-- 加入<u>springboot</u>对spring web的支持 -->

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

  <exclusions>

  <exclusion>

  <groupId>org.junit.vintage</groupId>

  <artifactId><u>junit</u>-vintage-engine</artifactId>

  </exclusion>

  </exclusions>

  </dependency>

  </dependencies>

  <build>

  <plugins>

  <!-- 打包插件 -->

  <plugin>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-<u>maven</u>-<u>plugin</u></artifactId>

  </plugin>

  </plugins>

  </build>

</project>

|

创建 UserController

image.png

启动

image.png

http://127.0.0.1:8080/user

jar包启动测试

右键项目run

image.png
image.png

查看target

image.png

把jar包放到D盘,使用java -jar yangbuyi-erp-2020-0.0.1-SNAPSHOT.jar 来执行

image.png

banner的修改

spring Boot启动的时候会有一个默认的启动图案。如下图

image.png

(1).在src/main/resources路径下新建一个banner.txt文件,并输入想要的内容即可。

image.png

(2).我这里面用在线生成图案的网站 http://www.network-science.de/ascii/如图

image.png

再启动

image.png

也可以使用一张图片,取名叫banner.png/jpg放到src/main/resources里面

image.png
image.png

也可以关闭banner

image.png

04【掌握】常用注解[spring的java配置]

1. 相关注解说明

1、@Configuration作用于类上,相当于一个xml配置文件;

2、@Bean作用于方法上,相当于xml配置中的<bean>;

3、@Import注解 在创建配置文件之后可以引入其它的配置文件

4、@ComponentScan("com.sxt")配置扫描

5、@Qualifier注解了,qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,我们修改调用代码,添加@Qualifier注解,需要注意的是@Qualifier的参数名称必须为我们之前定义@Bean注解的名称之一

2. 测试存在的问题加入依赖


<dependency>

  <groupId>org.junit.platform</groupId>

  <artifactId><u>junit</u>-platform-launcher</artifactId>

  <scope>test</scope>

  </dependency>

05【掌握】springboot启动分析【难点】

@SpringBootApplication


@Target(ElementType.***TYPE***)

@Retention(RetentionPolicy.***RUNTIME***)

@Documented

@Inherited

@SpringBootConfiguration 就是对spring里面的@Configruation的包装

@EnableAutoConfiguration 启动自动配置

//扫描

@ComponentScan(excludeFilters = { @Filter(type = FilterType.***CUSTOM***, classes = TypeExcludeFilter.**class**),

  @Filter(type = FilterType.***CUSTOM***, classes = AutoConfigurationExcludeFilter.**class**) })

@ConfigurationPropertiesScan

**public**  **@interface**  SpringBootApplication {

@EnableAutConfigruation


@Target(ElementType.***TYPE***)

@Retention(RetentionPolicy.***RUNTIME***)

@Documented

@Inherited

@AutoConfigurationPackage //自动配置的包

@Import(AutoConfigurationImportSelector.**class**) //导入自己配置配置的配置类

**public**  **@interface**  EnableAutoConfiguration {

@AutoConfigurationPackage

@Target(ElementType.***TYPE***)

@Retention(RetentionPolicy.***RUNTIME***)

@Documented

@Inherited

@Import(AutoConfigurationPackages.Registrar.**class**) //自己扫描包的配置类

**public**  **@interface**  AutoConfigurationPackage {

}

进入AutoConfigurationPackages.Registrar.class

image.png

进入register方法

image.png

可以看出默认扫描的就是当前启动类所在的包

如何加载自动配置类

回到EnableAutoConfiguration

image.png

进入AutoConfigurationImportSelector

<servlet>

 <servlet-name>springmvc</servlet-name>

<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

<url-patten>/ </url-patten>

</servlet-mapping>

查看getAutoConfigurationEntry

image.png

发现springboot默认加载了124个自动配置类

image.png

下面的代码走完之后发现只有22个了。因为有些配置类不满足条件,被移除了

那124个自动配置类是如何加进来的

image.png
image.png
image.png
image.png

springboot提供了哪些starter

https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#using-boot-starter

06【掌握】springboot热部署

在修改代码或配置文件之后不用重启服务

image.png

07【掌握】springboot的两种配置文件语法

解决提示问题

image.png

创建Student

@ConfigurationProperties(prefix=”student”)

Springboot标记了IOC容器里面一个对象

当IOC里面的对象初始化完成之后,再去扫描ConfigurationProperties

然后把配置文件里面是student前缀开头的配置注入到IOC这个对象的相应的set方法里面

image.png

使用application.properties的文件注入

image.png

使用application.yml的文件注入

image.png

配置文件占位符

image.png
image.png

两种方法的说明

1,如果properties里面配置了就不会去yml里面去取值,如果没有配置就会去yml里面去取

2,两种配置方法是互补的

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容