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

Spring 核心知识点补充

Spring 核心知识点补充

1. IoC(控制反转)
  • 核心思想:将对象的创建和依赖管理交给容器,而非在代码中直接控制
  • 实现方式
    • XML 配置:<bean> 标签定义对象
    • 注解:@Component, @Service, @Repository, @Controller
    • Java 配置:@Configuration + @Bean
  • 容器ApplicationContext 接口(如 ClassPathXmlApplicationContext, AnnotationConfigApplicationContext
2. AOP(面向切面编程)
  • 核心概念
    • 切面(Aspect):横切关注点的模块化(如日志、事务)
    • 连接点(Joinpoint):方法执行点
    • 通知(Advice)
      • @Before:前置通知
      • @After:后置通知
      • @Around:环绕通知
      • @AfterThrowing:异常通知
      • @AfterReturning:返回通知
    • 切点(Pointcut):定义哪些连接点应用通知(如 @Pointcut("execution(* com.service.*.*(..))"
  • 实现原理:动态代理(JDK 动态代理/CGLIB)
3. 标记注解
  • 核心注解

    注解作用
    @Component通用组件标记
    @Service业务逻辑层
    @Repository数据访问层(自动转换持久层异常)
    @ControllerMVC 控制器
    @Configuration声明配置类
    @Bean定义单例 Bean(在配置类中使用)
    @Scope设置作用域(如 prototype, singleton
    @Lazy延迟初始化
    @Primary优先注入的 Bean
4. 依赖注入(DI)
  • 注入方式

    • 构造器注入(推荐):

      @Autowired
      public UserService(UserRepository repo) {this.repo = repo;
      }
      
    • Setter 注入

      @Autowired
      public void setRepo(UserRepository repo) {this.repo = repo;
      }
      
    • 字段注入(不推荐):

      @Autowired
      private UserRepository repo;
      
  • 其他注解

    • @Qualifier:解决多个同类型 Bean 冲突
    • @Value:注入属性值(如 @Value("${db.url}")
5. 构造方法注入
  • Spring 4.3+ 优化:单构造方法可省略 @Autowired
  • 循环依赖解决方案:通过构造器注入无法解决循环依赖(需用 Setter/字段注入)
6. 三级缓存与循环依赖
  • 缓存级别
    1. 一级缓存singletonObjects(完整 Bean)
    2. 二级缓存earlySingletonObjects(半成品 Bean)
    3. 三级缓存singletonFactories(Bean 工厂)
  • 循环依赖解决流程(以 A→B→A 为例):
    1. 创建 A 实例 → 放入三级缓存
    2. A 注入 B → 创建 B 实例 → 放入三级缓存
    3. B 注入 A → 从三级缓存获取 A 的工厂 → 生成 A 代理对象 → 放入二级缓存
    4. B 初始化完成 → 移入一级缓存
    5. A 完成初始化 → 移入一级缓存
  • 关键点
    • 只适用于 单例作用域singleton
    • 构造器注入无法解决循环依赖
    • 原型作用域(prototype)不支持循环依赖
7. 易遗漏的核心知识点
  • Bean 生命周期

    1. 实例化 → 2. 属性填充 → 3. BeanNameAware → 4. BeanFactoryAware
    2. ApplicationContextAware → 6. 前置处理器 → 7. @PostConstruct
    3. InitializingBean → 9. 自定义 init-method → 10. 后置处理器
    4. 使用 → 12. @PreDestroy → 13. DisposableBean → 14. 自定义 destroy-method
  • 事务管理

    • 注解 @Transactional
    • 传播行为(Propagation.REQUIRED
    • 隔离级别(Isolation.READ_COMMITTED
  • 设计模式应用

    • 工厂模式(BeanFactory
    • 代理模式(AOP)
    • 模板方法(JdbcTemplate
    • 观察者模式(ApplicationEvent 事件机制)
  • 扩展机制

    • BeanPostProcessor:干预 Bean 初始化过程
    • BeanFactoryPostProcessor:修改 Bean 定义(如 PropertySourcesPlaceholderConfigurer
    • ImportSelector:动态加载配置类
  • Spring Boot 关联

    • 自动配置原理:@EnableAutoConfigurationMETA-INF/spring.factories
    • 条件注解:@ConditionalOnClass, @ConditionalOnProperty
8. 最佳实践建议
  1. 避免循环依赖:重构代码(提取公共逻辑到新类)
  2. 优先使用构造器注入:保证依赖不可变,避免 NPE
  3. 谨慎使用 @Autowired:明确依赖关系,推荐 final + 构造器
  4. AOP 切面粒度:避免过度拦截,影响性能

示例:构造器注入解决循环依赖

@Service
public class ServiceA {private final ServiceB serviceB;public ServiceA(ServiceB serviceB) {this.serviceB = serviceB;  // Spring 通过三级缓存解决依赖}
}@Service
public class ServiceB {private final ServiceA serviceA;public ServiceB(ServiceA serviceA) {this.serviceA = serviceA;}
}

通过理解这些核心机制,能更高效地解决 Spring 应用中的复杂问题(如循环依赖),并编写可维护性高的代码。

相关文章:

  • 第6讲、 Odoo 18 `tools` 模块深度分析
  • 技术分享 | Oracle SQL优化案例一则
  • OSI 七大层详解
  • 桂花网体育运动监测方案:开启幼儿园运动健康管理新篇章
  • SpringBoot集成第三方jar的完整指南
  • 利用TOA与最小二乘法直接求解
  • ubuntu系统上运行jar程序输出时间时区不对
  • 【第4章 图像与视频】4.1 图像的绘制
  • 【第4章 图像与视频】4.6 结合剪辑区域来绘制图像
  • 语法糖介绍(C++ Python)
  • Yum配置第三方源与本地源详解
  • Java-代码段-http接口调用自身服务中的其他http接口(mock)-并建立socket连接发送和接收报文实例
  • 练习小项目9:打字效果文字展示(多段文字循环+删除+光标闪烁)
  • 嵌入式学习笔记 - freeRTOS同优先级任务时间片抢占的实现
  • 酒店管理破局:AI 引领智能化转型
  • hf-mirror断点续传下载权重
  • (6)-Fiddler抓包-Fiddler状态面板详解
  • Java面试:从Spring Boot到分布式系统的技术探讨
  • SCL语言两台电机正反转控制程序从选型、安装到调试全过程的详细步骤指南(下)
  • 目标检测预测框置信度(Confidence Score)计算方式
  • 别墅效果图网站/免费推广网站大全下载安装
  • 在360上做网站多少钱/广告推广方案怎么写
  • 有免费的微网站是什么/营销托管全网营销推广
  • 地铁建设网站/站长统计推荐
  • wordpress建立视频网站/某网站seo策划方案
  • 柳州哪里有网站建设/谷歌浏览器安卓版下载