当前位置: 首页 > news >正文

Spring相关概念

文章目录

      • 一、Spring IOC容器(控制反转)
        • 1. 核心思想
        • 2. 依赖注入(DI,Dependency Injection)
      • 二、Bean对象
        • 1. 定义
        • 2. Bean的配置方式
        • 3. 注解扫描
      • 三、依赖注入的具体实现
        • 1. 属性赋值规则
        • 2. 自动装配(Autowiring)
      • 四、Spring Bean的作用域
      • 五、AOP(面向切面编程)
      • 六、其他核心概念
        • 1. 工厂模式与Spring Bean
        • 2. 发布(Deployment)

一、Spring IOC容器(控制反转)

1. 核心思想
  • IOC(Inversion of Control,控制反转)
    传统开发中,对象的创建和依赖关系由开发者手动控制(如 new Object());IOC模式下,对象的创建、管理及依赖关系由Spring容器负责,开发者仅需定义对象,无需关心其创建过程,实现“控制权反转”。
  • 核心容器
    Spring的IOC容器是管理Bean对象的核心,主要实现类为 ApplicationContext(常用)和 BeanFactory,负责Bean的实例化、配置和组装。
2. 依赖注入(DI,Dependency Injection)
  • 定义:IOC的具体实现方式,指Spring容器在创建Bean时,自动将其依赖的其他Bean或属性值注入到对象中(即“给属性赋值”)。
  • 目的:解除对象间的硬编码依赖,降低耦合度。
  • 注入方式
    • 构造方法注入:通过构造函数参数传递依赖。
    • Setter方法注入:通过Setter方法给属性赋值(最常用)。

二、Bean对象

1. 定义
  • Bean:由Spring IOC容器管理的对象,是应用程序的核心组件(如Service、Dao层对象),需通过配置或注解定义。
2. Bean的配置方式
  • XML配置
    通过 <bean> 标签定义Bean,示例:

    <bean id="userService" class="com.example.UserService"><property name="userDao" ref="userDao"/> <!-- 依赖注入 -->
    </bean>
    
    • id:Bean的唯一标识(不可重复)。
    • name:与 id 等效,可指定多个别名(用逗号/空格分隔),两者均用于容器中定位Bean。
    • class:Bean的全类名(容器通过反射创建对象)。
  • 注解配置
    通过注解直接标注类,替代XML配置,常用注解:

    注解作用适用场景
    @Component通用组件注解,标识此类为Spring Bean无明确分层的组件
    @Service继承 @Component,标识服务层组件Service层类
    @Repository继承 @Component,标识数据访问层组件Dao层类
    @Controller继承 @Component,标识控制器组件Spring MVC的Controller层
3. 注解扫描
  • 扫描器配置
    若使用注解定义Bean,需在配置类或XML中开启组件扫描,指定需要扫描的包路径:
    // 配置类方式
    @Configuration
    @ComponentScan(basePackages = "com.example") // 扫描指定包下的注解
    public class SpringConfig {}
    
    <!-- XML方式 -->
    <context:component-scan base-package="com.example"/>
    
  • 是否需要额外注解
    开启扫描后,被 @Component 及其派生注解(@Service 等)标注的类会被自动注册为Bean,无需额外配置;未被注解的类不会被扫描。

三、依赖注入的具体实现

1. 属性赋值规则
  • 基本类型与包装类
    若Bean的属性是基本类型(intString)或包装类(IntegerBoolean),可直接通过 value 赋值(XML中用 <property name="age" value="20"/>,注解中用 @Value("20"))。
  • 引用类型
    若属性是自定义对象(如 UserDao),需通过 ref 引用容器中已存在的Bean(XML中用 <property name="userDao" ref="userDao"/>,注解中用 @Autowired)。
2. 自动装配(Autowiring)
  • 定义:Spring容器自动为Bean注入依赖的过程,无需手动指定 refvalue

  • 实现方式

    • XML配置:在 <bean> 中通过 autowire 属性指定自动装配方式:
      <bean id="userService" class="com.example.UserService" autowire="byName"/>
      
    • 注解方式
      • @Autowired:Spring提供的注解,默认按类型(byType)自动装配,需配合 @Qualifier("beanId") 指定Bean的id(解决类型冲突)。
      • @Resource:JDK提供的注解,默认按名称(byName)自动装配,若找不到名称匹配的Bean,则退化为按类型(byType)装配。
  • 自动装配规则

    • byName:根据属性名与容器中Bean的 id 匹配(属性名需与Bean的 id 一致)。
    • byType:根据属性类型与容器中Bean的类型匹配,要求容器中该类型的Bean唯一(单匹配),否则报错。
    • byName 找不到匹配的Bean,@Resource 会自动退化为 byType@Autowired 默认 byType,不自动退化(需手动指定 @Qualifier)。

四、Spring Bean的作用域

  • 定义:Bean在Spring容器中的生命周期和创建方式(单例/多例等)。

  • 常用作用域

    作用域说明适用场景
    singleton单例模式(默认),容器中仅创建一个Bean实例,所有请求共享此实例无状态组件(如Service、Dao)
    prototype多例模式,每次请求Bean时创建新实例有状态组件(如Struts2的Action)
    request每个HTTP请求创建一个新实例(Web环境)Spring MVC的请求相关组件
    session每个会话创建一个实例(Web环境)会话相关组件
  • 默认值:Spring默认使用 单例模式(singleton),Bean在容器初始化时创建,生命周期与容器一致。

五、AOP(面向切面编程)

  • 定义:一种通过“切面”分离横切关注点(如日志、事务)与业务逻辑的编程思想,实现代码复用和解耦。
  • 核心概念
    • 切面(Aspect):横切关注点的模块化(如日志切面)。
    • 通知(Advice):切面的具体行为(如前置通知、后置通知)。
    • 连接点(JoinPoint):程序执行过程中可插入切面的点(如方法调用前)。
    • 切入点(Pointcut):定义哪些连接点需要被通知(如指定包下的所有方法)。
  • 作用:在不修改业务代码的前提下,为方法添加通用功能(如日志记录、权限校验、事务管理)。

六、其他核心概念

1. 工厂模式与Spring Bean
  • Spring IOC容器本质上是工厂模式的实现:容器作为“Bean工厂”,根据配置(XML/注解)创建并管理Bean,开发者通过容器获取Bean(context.getBean("userService")),而非直接 new 对象。
2. 发布(Deployment)
  • Spring应用的发布指将应用部署到服务器(如Tomcat),通过容器启动类(如 main 方法中初始化 ApplicationContext)加载配置,启动IOC容器,完成Bean的创建和依赖注入,使应用对外提供服务。
http://www.dtcms.com/a/293420.html

相关文章:

  • 在腾讯云上安装gitlab
  • 《C++》面向对象编程--类(中)
  • Linux的进程管理源码相关内容梳理
  • 京东视觉算法面试30问全景精解
  • 洛谷 B3939:[GESP样题 四级] 绝对素数 ← 素数判定+逆序整数
  • 滑动窗口经典问题整理
  • 三维DP深度解析
  • 数学与应用数学专业核心课程解析
  • 【编程练习】
  • day 32 打卡
  • Linux中信号认识及处理和硬件中断与软中断的讲解
  • 生成式人工智能对网络安全的影响
  • 软件工程:软件设计
  • Python机器学习:从零基础到项目实战
  • 一个基于现代C++智能指针的优雅内存管理解决方案
  • Pycharm下载、安装及配置
  • Linux 内核不能直接访问物理地址,必须通过虚拟地址访问。
  • 17.VRRP技术
  • 【C++】简单学——vector类(模拟实现)
  • 基于SpringBoot+Vue的班级管理系统(Echarts图形化分析)
  • 一、Vue概述以及快速入门
  • DeepSeek下载量断崖式下跌72%,AI助手市场大洗牌 | AI早报
  • 广播分发中心-广播注册流程
  • 秋招Day17 - Spring - AOP
  • 构建RAG智能体(2):运行状态链
  • C#文件操作(创建、读取、修改)
  • 【世纪龙科技】电动汽车原理与构造-汽车专业数字课程资源
  • [c++11]final和override
  • 黄山派lvgl8学习笔记(2)导入头文件和新建一个按钮控件
  • 标记语言---XML