Spring起步
什么是Spring?
- Spring的核心是提供一个容器(
container
),通常称为Spring应用上下文(String application context
),它们会创建和管理应用组件(bean
) - 通过一种基于依赖注入的模式将
bean
装配在一起- 通常通过构造器参数和属性访问方法来实现的
- 优点
- 组件不会再去创建它所依赖的组件并管理它们的生命周期
- 使用依赖注入的应用:依赖于单独的实体(容器)来创建和维护所有的组件,并将其注入到需要它们的
bean
中
- 配置方式
- 历史上,指导
Spring应用上下文
将bean
装配在一起的方式是使用一个或者多个XML
文件(描述各个组件以及它们与其他组件的关联关系) - 最近的
Spring
版本中,基于Java
的配置更为常见-
@Configuration
注解会告知Spring
这是一个配置类 - 配置类中的方法使用
@Bean
注解进行了标注,表明这些方法返回的对象会以bean
的形式添加到Spring
的应用上下文中(默认情况下,bean id
与方法名相同)
-
- 基于
Java
方式的优点:- 更强的类型安全性以及更好的重构能力
- 不管何种方式,只有当
Spring
不能自动配置才需要
- 历史上,指导
-
Spring
自动配置-
组件扫描:自动发现应用类路径下的组件,并将它们创建成
Spring
应用上下文中的bean
-
自动装配:自动为组件注入它们所依赖的其他
bean
-
组件扫描:自动发现应用类路径下的组件,并将它们创建成
-
Spring Boot
-
Spring
框架的扩展 - 对
Spring
的自动配置技术进行了增强 - 优点
- 大幅度减少了构建应用所需的显式配置的数量
-
初始化Spring应用
- 使用
Spring Initializr
初始化应用- 它是一个
基于浏览器的Web应用
,同时也是一个REST API
- 能够生成一个
Spring
项目结构的骨架 - 可以使用各种想要的功能填充它
- 相当于一个模版
- 它是一个
- 构建规范
- 打包成
jar
文件还是war
文件?- 传统的
Java Web
应用都是打包成war
文件,jar
只是用来打包库和较为少见的桌面UI应用的 - 打包
jar
文件是基于云思维做出的选择,所有的Java
云平台都能够运行和执行jar
文件,但war
不一定,Spring Initializr
默认使用基于jar
的打包方式
- 传统的
- 什么是
pom.xml
文件?- 项目
Maven
构建规范 Project Object Model
- 项目
-
pom.xml
文件中依赖项的artifact ID
上的starter
单词的作用?-
Spring Boot Starter
依赖的特别之处在于它们本身并不包含库代码,而是传递性地拉取其他的库 - 好处:
- 构建文件显著减小并且更易于管理,不必为每个所需的依赖库都声明依赖
- 能够根据它们所提供的功能来思考依赖,而不是根据库的名称
- 不必担心库版本的问题
-
- 引导类
-
@SpringBootApplication
注解- 表明这是一个
Spring Boot
应用 - 是一个组合注解
-
@SpringBootConfiguration
:将该类设置为配置类,此注解实际上是@Configuration
注解的特殊形式 -
@EnableAutoConfiguration
: 启用Spring Boot
的自动配置 -
@ComponentScan
:启用组件扫描。这样我们能通过@Component
、@Controller
、@Service
这样的注解声明其他类,Spring
会自动发现它们并将它们注册为Spring应用上下文
中的组件
-
- 表明这是一个
-
SpringApplication
中静态run()
方法执行应用的引导过程,查创建Spring上下文
-
- 打包成
编写Spring应用
-
SpringMVC
:其核心是控制器的理念- 控制器是处理请求并以某种方式进行信息响应的类
- 浏览器应用中,控制器负责填充可选的
Model
并将请求传递给一个View
,以便于生成返回给浏览器的HTML
-
@Controller
注解主要让组件扫描将类识别为一个组件(@Component
、@Service
以及@Repository
有着类似的目的) -
@GetMapping
注解将HTTP GET
请求的路径与处理方法进行绑定
-
Spring Boot DevTools
- 开发辅助工具
- 代码变更后应用自动重启
- 当面向浏览器的资源(
HTML
、JS
、CSS
等)发生变化时,自动刷新浏览器 - 自动禁用模版缓存
- 如果使用
H2数据库
,内置H2控制台
- 应用自动重启
-
DevTools
运行的时候,应用程序会被加载到JVM
两个 独立的类加载器 中,分别加载:- 你的
Java代码
、属性文件
以及项目中“src/main”路径下几乎所有内容
- 依赖的库(这些库不太可能经常发生变化)
- 你的
- 当探测到变更时,
DevTools
只会 重新加载 包含项目代码的类加载器,并 重启Spring
的应用上下文,这样减少应用启动时间 - 不足:自动重启无法应对依赖项的变化
- 当我们在构建规范中 添加、变更、移除依赖 的时候,需要手动重新启动应用
-
- 浏览器自动刷新和禁用模版缓存
- 目的:为了在代码变更后,立即看到最新的结果,而不是之前结果的缓存
-
DevTools
运行时,自动启动一个LiveReload服务器
,当其与LiveReload浏览器插件
结合起来的时候,就能够在模版
、图片
、样式表
、JavaScript
等发生变化的时候自动刷新浏览器
- 内置的
H2控制台
- 如果使用
H2数据库
开发,DevTools
自动启用H2
.通过浏览器访问“http://localhost:8080/h2-console”
就能看到应用使用的数据
- 如果使用
- 开发辅助工具
俯瞰Spring风景线
-
Spring
核心框架-
web
框架:Spring MVC
- 数据持久化:
JdbcTemplate
-
反应时Web框架
:Spring WebFlux
-
-
Spring Boot
starter依赖
- 自动配置
-
Actuator
能够洞察应用运行时的内部工作状况
,包括指标
、线程dump信息
、健康状况
以及应用可用的环境属性
- 灵活的环境属性规范
- 在核心框架的测试辅助功能之上提供了对测试的额外支持
- 提供一个基于
Groovy脚本
的编程模型,称为Spring Boot CLI
(Command—Line Interface
)
-
Spring Data
- 将应用程序的
数据repository
定义为简单的Java接口
,在定义驱动存储和检索数据的方法时使用一种命名约定即可 - 能够处理多种不同类型的数据库,包扩关系型数据库、文档数据库(Mongo)、图数据库(Neo4j)等
- 将应用程序的
-
Spring Security
- 解决应用程序通用的安全性需求,包括身份验证、授权和API安全性
-
Spring Integration
和Spring Batch
- 提供对应用程序之间集成或者与本应用中的其他组件进行集成的一些方法
-
Spring Integration
解决了实时集成问题。在实时集成中,数据在可用时马上就会得到处理; -
Spring Batch
解决的是批处理集成问题
-
Spring Cloud
- 应用开发的新趋势不再将应用程序作为单个部署单元来开发,而是使用由微服务组成的多个独立部署单元来组合形成应用程序
-
Spring Cloud
直面一系列微服务问题,Spring Cloud
是使用Spring
开发云原生应用程序的一组项目
网友评论