Java-29 深入浅出 Spring - IoC 基础 启动IoC容器的方式 Java方式与Web(XML、配置)方式

点一下关注吧!!!非常感谢!!持续更新!!!

大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html

目前已经更新到了:

  • MyBatis(已更完)
  • Spring(正在更新...)

IoC 基础

BeanFactory 和 ApplicationContext 区别

BeanFactory 是 Spring 框架中 IoC 容器的顶层接口,它只是用来定义一些基础功能,定义一些基础规范,而 ApplicationContext 是它的一个子接口,所以 ApplicationContext 是具备 BeanFactory 提供的全部功能。

通常,我们称 BeanFactory 为 SpringIoC 容器,ApplicationContext 是容器的高级接口,比 BeanFactory 要拥有更多的功能,比如说国际化支持和资源访(XML、Java 配置类)等等。

BeanFactory

  • 是 Spring 框架的核心接口,提供了最基本的 IoC 容器 功能。
  • 主要用于延迟初始化(懒加载)bean。
  • 适合用于资源受限的环境(例如:移动设备、嵌入式系统)。
  • 实现类:DefaultListableBeanFactory。

ApplicationContext

  • 是 BeanFactory 的子接口,提供了更多的功能。
  • 适合大型企业级应用,提供事件发布、国际化支持等高级功能。
  • 实现类:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext 等。

BeanFactory 场景

  • 用于资源受限的环境或测试场景。
  • 如果应用程序不需要 ApplicationContext 的高级功能,BeanFactory 是一个更轻量级的选择。

ApplicationContext 场景

  • 用于企业级应用,支持国际化、事件监听、AOP 等高级功能。
  • 推荐在大部分 Spring 应用中使用。

项目准备

拷贝项目

我们把上一节的项目拷贝一份,后续将在上节的基础上进行调整。

添加依赖

需要在上节的依赖的基础上,加入下面的新的依赖:

xml 复制代码
<!-- Spring -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.1.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.13</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.1.12.RELEASE</version>
</dependency>

对应截图如下所示:

启动 IoC 容器

Java 环境

  • ClassPathXmlApplicationContext:从类的根路径下加载配置文件(推荐使用)
  • FileSystemXmlApplicationContext:从磁盘路径上加载配置文件
  • AnnotationConfigApplicationContext:纯注解模式下启动 Spring 容器

Web 环境

XML 方式

从 XML 启动容器,修改 webapp 下的 WEB-INF 下的 web.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

对应的截图如下所示:

配置类 方式

从配置类启动容器

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>wzk.SpringConfig</param-value>
    </context-param>
    <!--使⽤监听器启动Spring的IOC容器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

对应的截图如下所示:

相关推荐
Coder个人博客2 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
侠客行03173 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪3 小时前
深入浅出LangChain4J
java·langchain·llm
灰子学技术5 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚5 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎5 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
二十雨辰5 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码5 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚5 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂5 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言