集合
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
image.png image.png image.png再生成
在直接导入到idea 当中即可 导入还不会的话 就别学了!!!!!
方式2
image.png image.png image.png选中需要的依赖包
image.png项目目录说明
image.pngResource/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.pngjar包启动测试
右键项目run
image.png image.png查看target
image.png把jar包放到D盘,使用java -jar yangbuyi-erp-2020-0.0.1-SNAPSHOT.jar 来执行
image.pngbanner的修改
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.png04【掌握】常用注解[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.pngspringboot提供了哪些starter
https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#using-boot-starter
06【掌握】springboot热部署
在修改代码或配置文件之后不用重启服务
image.png07【掌握】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,两种配置方法是互补的