《spring实战第四版》读书笔记-01
1. Spring的核心
1.1 Spring概念
Spring是轻量级的开源JavaEE框架。Spring的两个核心特性:DI
和AOP
,DI能使各个组件保持松散耦合,而AOP可以将分布于各个组件之间的功能分离出来形成可重用的组件。Spring最根本的使命就是简化Java开发。为了实现这一目标,spring采取了以下四种关键策略:
-
基于POJO的轻量级和最小入侵性编程
spring不会强迫使用者去改变POJO,使用装配的方式对Bean进行管理
装配
wiring
:创建应用组件之间协作的行为,就是将bean交给spring管理的过程。spring提供两种装配bean的方式,一种是基于xml装配
,另一种是基于注解装配
。应用上下文
ApplicationContext
:spring通过应用上下文装载bean并将同名组装起来。常用ClassPathXmlApplicationContext
对象加载spring的配置文件,读取其中注册的JavaBean。 -
通过依赖注入和面向接口实现松耦合
依赖注入。就像打针一样,需要打什么药就到针管中放入对应药,而不是说针管里面本身有药,要去找不同的针管。松散了针管和药之间的耦合度。
依赖注入的两种方式:
构造器注入
和set方法注入
-
基于切面和惯例进行声明式编程
面向切面编程可以将分布于各个组件中的相同功能提取出来成为可重用的组件。AOP可以将可重用组件变成一个外壳,套在其他需要它的组件上面。这样的好处就是让其他组件具有更高的内聚性,让它着重去关系自己的核心功能。
一般是将安全、事务、日志通过AOP与核心功能分离。
比如骑士和呤游诗人的关系
-
通过切面和模版减少样板式代码
切面可以将可重用的代码抽离出来,模版可以减少代码量,比如
JdbcTemplate
1.2 IOC容器
在基于spring的应用中,bean生存与spring容器中。spring容器负责创建、装配它们,配置并管理它们的整个生命周期。spring自带多个容器,可以归为两大类型:
-
bean工厂:
BeanFactory
,是最简单的容器,提供基础的DI支持 -
应用上下文:
ApplicationContext
,基于BeanFactory
构建,并提供应用框架级别的服务。spring自带了多种应用上下文,以下几种是用到频率比较多的:AnnotationConfigApplicationContext
:从一个或多个基于Java配置类中加载Spring应用上下文AnnotationConfigWebApplicationContext
:从一个或多个基于Java的配置类中加载SpringWeb应用上下文ClassPathXmlApplicationContext
:从类路径下的一个或多个XML配置文件中加载上下文定义FileSystemXmlapplicationontext
:从文件系统下单一个或多个xml配置文件中加载上下文定义XmlWebApplicationContext
:从web应用下的一个或多个XML配置文件中加载上下文定义
其中最常用的就是
ClassPathXmlApplicationContext
1.2.1 Bean的生命周期
- spring对bean进行实例化(创建bean实例)
- spring将值和bean的引用注入到bean对应的属性中(依赖注入)
- 若bean实现了
BeanNameAware
接口,Spring将bean的ID传递给setBeanName()
方法 - 若bean实现了
BeanFactoryAware
接口,spring将调用setBeanFactory()
方法,将BeanFactory容器实例传入 - 若bean实现了
ApplicationContextAware
接口,spring将调用setApplicationContext()
方法,将bean所在的应用上下文引用传入进来 - 若bean实现了
BeanPostProcessor
接口,spring将调用postProcessBeforeInitializingBean()
方法 - 若Bean实现了
InitializingBean
接口,spring将调用afterPropertiesSet()
方法 - 若bean实现了
BeanPostProcessor
接口,spring将调用postProcessAfterInitialization()
方法 - bean准备就绪,可以被使用
- 若bean实现了
DisposableBean
接口,spring将调用它的destory()
方法
1.3 Spring生态圈
- Spring核心容器:创建bean和理bean,对多种应用上下文的实现,提供企业服务,如Email、JNDI访问、EJB集成和调度
- Spring的AOP模块:Spring对面向切面提供了丰富的支持
- 数据访问和集成:spring抽象了模版式代码,使操作数据库的代码变得简单明了,还可以避免数据库资源关闭而引发的问题。同时spring提供了
ORM(Object-Relational Mapping)
模块,spring的ORM模块建立在DAO的支持之上,并未多个ORM框架提供了一种构建DAO的快捷方式,让spring更好的去集成这些ORM框架 - Web与远程调用:SpringMVC框架
- Instrumentation:
- 测试:
- Spring Portfolio:Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库。概括的讲,spring portfolio几乎为每一个领域的Java开发都提供了spring编程模型
- Spring Web Flow:建立于SpringMVC之上,它为基于流程的会话式Web应用提供了支持(比如购物车和向导功能)
- Spring Web Service:
- Spring Security:Spring Security为Spring应用提供了声明式安全机制
- Spring Integration:
- Spring Batch:
- Spring Data:
- Spring Social:
- Spring Mobile:
- Spring for Android:
- Spring Boot:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~