Salmon的全栈知识 Salmon的全栈知识
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Spring框架

    • 传统Javaweb开发的困惑
    • IoC、DI和AOP思想提出
    • Spring框架的诞生
      • 1、Spring 框架概述
      • 2、Spring 框架的历史
      • 3、Spring Framework技术栈图示
      • 4、BeanFactory 快速入门
        • 4.1、引入依赖(Maven)
        • 4.2、编写核心代码
        • 4.3、创建beans.xml配置文件
        • 4.4、编写测试代码:BeanFactory 加载配置获取对象
      • 5、ApplicationContext快速入门
      • 6、BeanFactory与ApplicationContext的关系
      • 7、BeanFactory的继承体系
      • 8、ApplicationContext的继承体系
    • 基于xml的Spring应用
    • 基于注解的Spring应用
    • AOP 简介
    • 基于xml配置的AOP
    • 基于注解配置的AOP
    • 基于AOP的声明式事务控制
  • SpringMVC框架

    • Spring整合web环境
    • web层MVC框架思想与设计思路
    • SpringMVC简介
    • SpringMVC的请求处理
    • SpringMVC的响应处理
    • SpringMVC的拦截器
    • SpringMVC的全注解开发
    • SpringMVC的组件原理剖析
    • SpringMVC的异常处理机制
  • 《Spring生态》笔记
  • Spring框架
Salmon
2025-07-23
目录

Spring框架的诞生

# 1、Spring 框架概述

spring是一个开源的轻量级Java开发应用框架,可以简化企业级应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。Spring的生态及其完善,不管是Spring哪个领域的解决方案都是依附于在Spring Framework基础框架的。

Spring的官网: https://www.spring.io (opens new window)

image-20250724002429040

# 2、Spring 框架的历史

  • Jsp 默默扛下所有;
  • MVC+三层架构分工明确,但开发成本及其高;
  • EJB 重量级框架出现,走出一个困境,有进入另一个困境;
  • Spring 春天来到,随之,SSH风生水起、称霸武林;
  • Spring 稳住江湖大哥位置,SSM开始上位;
  • Spring 本着“拿来主义”的思维快速发展,生态不断健全;
  • SpringBoot 又一里程碑崛起,把“约定大于配置“思想玩儿的炉火纯青;
  • SpringCloud 打包了微服务众多解决方案,应对互联网项目更加easy!

# 3、Spring Framework技术栈图示

image-20250724002556617

# 4、BeanFactory 快速入门

根据下图,分析一下Spring的BeanFactory的开发步骤:

image-20250724002618256

1)导入Spring的jar包或Maven坐标;

2)定义UserService接口及其UserServiceImpl实现类;

3)创建beans.xml配置文件,将UserServiceImpl的信息配置到该xml中;

4)编写测试代码,创建BeanFactory,加载配置文件,获取UserService实例对象。

# 4.1、引入依赖(Maven)

<!-- Spring 核心容器 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.3.7</version>
</dependency>

# 4.2、编写核心代码

1)定义UserDao接口及其UserDaoImpl实现类

public interface UserDao {}

public class UserDaoImpl implements UserDao {}

2)修改UserServiceImpl代码,添加一个setUserDao(UserDao userDao)用于接收注入的对象

public interface UserService {}

public class UserServiceImpl implements UserService {
  public void setUserDao(UserDao userDao) {
		System.out.println(userDao);
	}
}

# 4.3、创建beans.xml配置文件

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
	<property name="userDao" ref="userDao"/>
</bean>

# 4.4、编写测试代码:BeanFactory 加载配置获取对象

// 创建 BeanFactory
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// 创建 XML 读取器
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
// 加载配置文件
reader.loadBeanDefinitions("beans.xml");
// 获取 Bean 实例
UserService userService = (UserService) beanFactory.getBean("userService");

上面使用BeanFactory完成了IoC思想的实现,下面去实现以下DI依赖注入:

1)定义UserDao接口及其UserDaoImpl实现类;

2)修改UserServiceImpl代码,添加一个setUserDao(UserDao userDao)用于接收注入的对象;

3)修改beans.xml配置文件,在UserDaoImpl的<bean>中嵌入<property>配置注入;

4)修改测试代码,获得UserService时,setUserService方法执行了注入操作。

# 5、ApplicationContext快速入门

ApplicationContext 称为Spring容器,内部封装了BeanFactory,比BeanFactory功能更丰富更强大,使用ApplicationContext 进行开发时,xml配置文件的名称习惯写成applicationContext.xml

//创建ApplicationContext,加载配置文件,实例化容器
ApplicationContext applicationContext = new ClassPathxmlApplicationContext(“applicationContext.xml");
//根据beanName获得容器中的Bean实例
UserService userService = (UserService) applicationContext.getBean("userService");
System.out.println(userService);

# 6、BeanFactory与ApplicationContext的关系

1)BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring 容器;

2)ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装;

3)Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融合关系。

4)Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是配置文件加载,容器一创建就将Bean都实例化并初始化好。

ApplicationContext除了继承了BeanFactory外,还继承了ApplicationEventPublisher(事件发布器)、ResouresPatternResolver(资源解析器)、MessageSource(消息资源)等。但是ApplicationContext的核心功能还是BeanFactory。

image-20250724003519162

image-20250724003529593

applicationContext内部维护着beanFactory的引用,在学习过程中会查看beanFactory内部维护的属性,断点查看如下图示内容的

image-20250724003555617

验证BeanFactory和ApplicationContext对Bean的初始化时机,在UserDaoImpl的无参构造内打印一句话,验证构造方法的执行时机

public class UserDaoImpl implements UserDao {
	public UserDaoImpl() {
		System.out.println("UserDaoImpl创建了...");
	}
}

断点观察,BeanFactory方式时,当调用getBean方法时才会把需要的Bean实例创建,即延迟加载;而ApplicationContext是加载配置文件,容器创建时就将所有的Bean实例都创建好了,存储到一个单例池中,当调用getBean时直接从单例池中获取Bean实例返回

# 7、BeanFactory的继承体系

BeanFactory是核心接口,项目运行过程中肯定有具体实现参与,这个具体实现就是DefaultListableBeanFactory,而ApplicationContext内部维护的Beanfactory的实现类也是它

image-20250724003825593

# 8、ApplicationContext的继承体系

只在Spring基础环境下,即只导入spring-context坐标时,此时ApplicationContext的继承体系

image-20250724003857373

只在Spring基础环境下,常用的三个ApplicationContext作用如下:

实现类 功能描述
ClassPathXmlApplicationContext 加载类路径下的 XML 配置的 ApplicationContext
FileSystemXmlApplicationContext 加载磁盘路径下的 XML 配置的 ApplicationContext
AnnotationConfigApplicationContext 加载注解配置类的 ApplicationContext

如果Spring基础环境中加入了其他组件解决方案,如web层解决方案,即导入spring-web坐标,此时ApplicationContext的继承体系

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>5.3.7</version>
</dependency>

image-20250724004008377

在Spring的web环境下,常用的两个ApplicationContext作用如下:

实现类 功能描述
XmlWebApplicationContext Web 环境下,加载类路径下的 XML 配置的 ApplicationContext
AnnotationConfigWebApplicationContext Web 环境下,加载注解配置类的 ApplicationContext

PS:web环境下的这两个ApplicationContext,在学习Spring集成web时在进行讲解

上次更新: 2025/07/25, 07:39:11
IoC、DI和AOP思想提出
基于xml的Spring应用

← IoC、DI和AOP思想提出 基于xml的Spring应用→

Theme by Vdoing | Copyright © 2022-2025 Salmon's Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式