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 Bootstarter依赖- 自动配置
-
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开发云原生应用程序的一组项目














网友评论