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

Spring AOP IOC

spring的优缺点

  • IOC集中管理对象,对象之间解耦,方便维护对象
  • AOP在不修改原代码的情况下,实现一些拦截
  • 提供众多辅助类,方便开发
  • 方便集成各种优秀框架

紧耦合和松耦合

松耦合可以使用单一职责原则、接口分离原则、依赖倒置原则

IOC

**概念:**依赖控制反转,在IOC之前,一个对象要引入另一个对象就要自己new,用完之后也要自己释放,对象之间耦合较深,出现IOC之后,由spring来控制对象注入,引用对象只需要用就可以了,不需要再管理注入对象的生命周期。

**DI:**依赖注入。运行时依赖 IoC 容器来动态注入对象所需要的外部依赖。通过反射实现的。

**IOC的实现原理:**通过工厂模式和反射机制,beanFactory:

AOP

面向切面,多个对象的公共逻辑抽取。在内存中生成一个aop对象,包含原对象的所有方法,并在切点执行完成后调用原对象的方法。

连接点(Join point):指程序运行过程中所执行的方法。
切面(Aspect):被抽取出来的公共模块
切点(Pointcut):切点用于定义 要对哪些Join point进行拦截。
通知 advice:before after around AfterReturning AfterThrowing
织入(Weaving):通过动态代理,在目标对象(Target)的方法(即连接点Join point)中执行增强逻辑(Advice)的过程。

Spring容器的启动流程

实例化Spring容器,注册BeanDefination,调用refresh刷新容器。
1、初始化Spring容器,注册内置的BeanPostProcessor的BeanDefinition到容器中
2、将配置类的BeanDefinition注册到容器中
3、调用refresh()方法刷新容器

BeanFactory和ApplicationContext有什么区别?

BeanFactory是Spring里面最底层的接口,是IoC的核心,定义了IoC的基本功能,包含了各种Bean的定义、加载、实例化,依赖注入和生命周期管理。ApplicationContext接口作为BeanFactory的子类,除了提供BeanFactory所具有的功能外

Spring Bean的生命周期

Spring Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate --> 初始化 Initialization --> 销毁 Destruction

Spring中bean的作用域

(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。
(2)prototype:为每一个bean请求创建一个实例。
(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
(4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。
(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。

BeanFactory的作用

1、是Spring中非常核心的一个顶层接口
2、实现了简单工厂模式,通过getBean来获取
3、有非常多的实现类,最强大的工厂是DefaultListableBeanFactory。Spring底层就是使用的该实现工厂进行生产Bean的
4、BeanFactory也是容器,管理Bean的生命周期

BeanFactory和ApplicationContext的区别

ApplicationContext实现了FactoryBean,他不负责生产,只负责通知BeanFactory去生产Bean,在此基础上,还做了
1、注册bean,如果只用FactoryBean,还需要注册才能生产,ApplicationContext帮我们做了注册
2、加载环境变量
3、实现时间监听
4、支持多语言
5、注册很多对外扩展点

循环依赖如何被解决

只能解决通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题。
三级缓存

http://www.lryc.cn/news/338075.html

相关文章:

  • Linux ARM平台开发系列讲解(QEMU篇) 1.1 编译QEMU 构建RISC-V64架构 运行Linux kernel
  • Day19-【Java SE进阶】网络编程
  • pyqt写个星三角降压启动方式2
  • js可视化爬取数据生成当前热点词汇图
  • 研发岗-面临统信UOS系统配置总结
  • 【STL详解 —— list的介绍及使用】
  • cocos creator开发中遇到的问题和解决方案
  • 10分钟带你学会配置DNS服务正反向解析
  • 【vim 学习系列文章 19 -- 映射快捷键调用两个函数 A 和B】
  • Windows安装MongoDB结合内网穿透轻松实现公网访问本地数据库
  • sgg大数据全套技术链接[plus]
  • OpenHarmony南向嵌入式:【XR806开发板指导文档】
  • Rust 实战练习 - 10. JSON、XML、YAML/TOML、Ini专题
  • 5.Hexo为页面标记标签和类别
  • ·13·1dawwd
  • Docker - PostgreSQL
  • Python | Leetcode Python题解之第26题删除有序数组中的重复项
  • 【电控笔记4】拉普拉斯-传递函数-pid
  • 针对“AI+医疗”的可行方案
  • 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测
  • Go——面向对象
  • 身份证识别ocr、身份证实名认证接口文档
  • C++ 文件操作
  • 【数据结构】-- 单链表 vs 双向链表
  • 暴雨孙辉:做好服务器,但更要辟出技术落地之道
  • 天地人和•大道不孤——卢禹舜中国画作品展在重庆美术馆隆重开幕
  • python-pytorch使用日志0.5.007
  • itop4412编译内核时garbage following instruction -- `dmb ish‘ 解决方案
  • (学习日记)2024.04.16:UCOSIII第四十四节:内存管理
  • 微信小程序Skyline模式下瀑布长列表优化成虚拟列表,解决内存问题