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

SSM--容器

Spring


Spring:企业级 一站式 框架

框架:特定领域系统的一组约定、标准、代码库以及工具的集合


Spring 框架的介绍


CleanShot 2025-03-25 at 16.35.13@2x



一、组件和容器


组件:具有一定功能的对象

容器:管理组件(创建、获取、保存、销毁)

一个常见的容器: Servlet 容器 Servelet 组件

Tomcat:Servlet Container

在 Spring 中需要了解 IoC 和 DI

IoC:Inversion of Control (控制反转:一种思想 被动的 不需要自己主动的 类似于 婚介所 不需要自己去找 给提供)

​ 控制:资源的控制权(资源的创建、获取、销毁等)

​ 反转:和传统的方式不一样

DI:Dependency Injectioni(依赖注入)

​ 依赖:组件的依赖关系,如 NewController 依赖 NewsService

​ 注入:通过 setter 方法、构造器等方式自动的注入(赋值)

IoC 实现需要 通过 DI

获取容器中的组件对象;精确获取某个组件

组件的四大特性:(名字、类型)、对象、作用域

组件的名字全局唯一,如果组件名重复了,只会在容器中放最先声明的那个

小结:从容器中获取组件:1、组件不存在,抛异常 2、组件不唯一也会抛异常 3、组件唯一存在,返回正确值

组件创建的时机:容器启动过程中就会创建组件对象,对象是单实例特性的 每次获取从容器中拿取

配置类 分类管理 组件的配置; 配置类也是一个组件

Spring 为我们提供了快速的分层注解

1、@Controller 控制器

2、@Service 服务层

3、@Repository 持久层

4、@Component 组件

@ComponentScan(basePackages=“”) 组件批量扫描 “里面填写 路径”

第三方组件想要导入容器中,没办法分层注解:

1、@Bean:自己 new 注册给容器

2、import( )

Scope 调整组件的作用域

@Scope(“prototype”):非单实例

@Scope(“singleton”):单实例 (默认的)

@Scope(“request”):同一个请求单实例

@Scope(“session”):同一次会话单实例

@Lazy :懒加载 容器启动完成以前不会创建懒加载组件的对象

如果制造某些对象比较复杂的时候,利用工厂方法进行创建(factoryBean)

FactoryBean 在容器中放的组件的类型,是接口中泛型指定的类型,组件的名字是 工厂自己的名字

  Conditional -条件注册 

Autowired 自动装配 。 原理:Spring 调用容器.getBean

​ 1、按照类型,找到这个组件

​ 1.0、有且只找到一个,直接注入,名字无所谓

​ 1.1、如果找到多个,再按照名称去找;变量名就是名字

​ 1.1.1如果找到:注入

​ 1.1.2 如果找不到,报错

@Qualifer :精确指定

@Primary :标为主要的

@Resource 也是自动注入

面试题:@Resource 和 @Autowired 的区别

1、两者都可以做自动注入,都可以放在属性上

2、@Resource 是 Java 规定的,具有更强的通用性 @Autowired 是 Spring 规定的


@Value

1、@Value(“字面值”):直接复制

2、@Value(“${}”):动态从配置文件中取出某一项的值

3、@Value(“#{SpEl}”):spring Express Language : Spring表达式

@Profile(“环境标识”) 多环境

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


组件生命周期

@Bean

CleanShot 2025-04-16 at 15.04.44

CleanShot 2025-04-16 at 15.09.01

CleanShot 2025-04-16 at 15.09.58

@Autowired是如何实现的?

1、专门有一个处理@Autowired注解的 AutowiredAnnotationBeanPostProcessor

2、每个Bean创建之后,会调用BeanPostProcessor的postProcessorBeforeInitalization方法

3、postProcessBeforeInitialization里面就会利用反射,得到当前Bean的所有属性,利用反射得到Bean属性上标注的所有注解,看有没有@Autowired注解

4、如果有,去容器中找这个属性对应的组件(按类型、按名字)找到

相关文章:

  • 从零开始 保姆级教程 Ubuntu20.04系统安装MySQL8、服务器配置MySQL主从复制、本地navicat远程连接服务器数据库
  • 乘用车制动系统设计:保障行车安全的核心技术
  • vue2 element-ui 中 el-radio 单选框点击事件失效问题
  • 士兵乱斗(贪心)
  • 大数吞小数
  • SDL基础
  • MCP理解笔记及deepseek使用MCP案例介绍
  • 探索鸡养殖虚拟仿真实验:科技赋能养殖新体验
  • 重工业数字化转型
  • TAS启动与卸载
  • 单片机 | 基于51单片机的倾角测量系统设计
  • Flow 笔记
  • 什么是cnas认证?认证cnas证书有什么好处?
  • 《基于神经网络实现手写数字分类》
  • 用最简单的方式了解单例模式
  • PDF多功能转换编辑及扫描仪 iLovePDF 3.10.0
  • 【verilog】多个 if 控制同一个变量 是否不是标准的语言规范,标准的语言规范应该如何写?
  • 在时间的缝隙里雕刻故事:龙臻的影像语言与全球认可
  • opencv图片颜色识别
  • 【linux模块化编译驱动Makefile异常引发的惨案】
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 复原展出孙吴大墓,江苏首座考古博物馆将开放
  • 订婚不等于性同意!山西订婚强奸案入选最高法案例
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 陕西宁强县委书记李宽任汉中市副市长
  • 5吨煤炭“瞬间蒸发”?掺水炭致企业损失千万,腐败窝案曝光