java框架-Spring-IOC

news2024/11/27 17:49:00

文章目录

  • 一、组件注册
    • 包扫描+组件注解
      • 0)、 @ComponentScans
      • 1)、 @RestController
      • 2)、 @Srevice
      • 3)、 @Rerpository
      • 4)、@Component
    • 导入第三方包里的组件
      • 1)、@Configuration
      • 1)、@Bean
      • 1)、@Conditional(自定义条件类)
    • @Import 快速给容器导入一个组件
      • 1)、@Import
      • 2)、interface ImportSelector
      • 3)、ImportBeanDefinitionRegistrar
    • 使用Spring提供的 FactoryBean
      • 1)、interface FactoryBean<T>
  • 二、Bean生命周期
    • 创建
    • 初始化
    • 销毁
    • 1)、相关注解和接口
      • 1、指定初始化和销毁方法
      • 2、实现初始化和销毁接口
      • 3、JSR250
      • 4、Bean后置处理器:BeanPostProcessor
    • 2)、 Springd底层对BeanPostProcessor的使用
  • 三、属性赋值
      • @PropertySource
      • @Value
  • 四、自动装配
      • 1)、 @Autowired
        • @Qualifier:指定需要装配的bean id
        • @Primary:优先装配该Bean
        • 构造器、方法、属性同样支持,都是从容器中获取对应的Bean
      • 2)、@Resource(JSR250规范)
      • 3)、@Ingect(JSR330)
      • 4)、xxxAware:把Spring底层组件自动注册到Bean中
      • 5)、@Profile:根据环境配置给容器中注册组件

在这里插入图片描述

Spring官方文档
学习参考视频

一、组件注册

包扫描+组件注解

0)、 @ComponentScans

  • @ComponentScan
  • @ Filter

1)、 @RestController

  • @ResponseBody
  • @Controller

2)、 @Srevice

3)、 @Rerpository

4)、@Component

导入第三方包里的组件

1)、@Configuration

1)、@Bean

  • @Scope:prototype、singleton、request、session
  • @Lazy

1)、@Conditional(自定义条件类)

@Import 快速给容器导入一个组件

1)、@Import

2)、interface ImportSelector

3)、ImportBeanDefinitionRegistrar

使用Spring提供的 FactoryBean

1)、interface FactoryBean

  • 默认获取工厂bean调用getObject
  • 要获取工厂bean本身,需要在id前添加&

二、Bean生命周期

创建

  • 单例模式:容器初始化
  • 多礼模式:从容器中获取实例

初始化

  • 对象创建完成,并赋值好属性之后

销毁

  • 单实例:容器关闭的时候
  • 多实例:容器不会管理这个Bean,需要自己手动调用

1)、相关注解和接口

1、指定初始化和销毁方法

  • @Bean(initMethod=xxx, destroyMethod=xxx)

2、实现初始化和销毁接口

  • interface InitializingBean
  • interface DisposableBean

3、JSR250

  • @PostConstruct
  • @PreDestroy

4、Bean后置处理器:BeanPostProcessor

  • interface BeanPostProcessor
  • Bean初始化前执行postProcessBeforeInitialization,初始化后执行postProcessAfterInitialization
  • 整个在Bean赋值完成之后
  • ApplicationContextAware接口注入ApplicationContext的实现就是该处理器完成

2)、 Springd底层对BeanPostProcessor的使用

  • Bean赋值
  • 注入其他组件
  • @Autowired
  • 生命周期功能:注解、接口

三、属性赋值

@PropertySource

@Value

  • 基本数值
  • SpEL:#{}
  • ${},取出配置【yaml、properties】文件中的值,需要先加载配置文件到环境中

四、自动装配

1)、 @Autowired

  • 默认优先从容器中获取对应组件
  • 如果容器中存在多个相同类型Bean,根据名称注入Bean
  • required:true:必须,false:非必须
  • 由【AutowiredAnnotationBeanPostProcessor】处理器实现

@Qualifier:指定需要装配的bean id

  • 配合@Autowired使用

@Primary:优先装配该Bean

  • 配合@Bean使用

构造器、方法、属性同样支持,都是从容器中获取对应的Bean

  • 标在构造器上:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是默认从容器中装配
  • 标在属性上,setf方法上
  • 标在方法:@Bean+方法参数,参数从容器中获取

2)、@Resource(JSR250规范)

  • 默认按照组件名称装配
  • 不支持required

3)、@Ingect(JSR330)

  • 需要引入pom依赖
  • 不支持required

4)、xxxAware:把Spring底层组件自动注册到Bean中

  • interface ApplicationContextAware
  • interface BeanNameAware
  • interface EmbeddedValueResolverAware

5)、@Profile:根据环境配置给容器中注册组件

  • Dspring.profile.cative=test(test为环境变量)
  • 代码方式,容器启动前设置号参数
    1、 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
    2、 annotationConfigApplicationContext.getEnvironment().setActiveProfiles(“test”);
    3、 annotationConfigApplicationContext.register(componentClasses);
    4、 annotationConfigApplicationContext.refresh();
  • 可以添加在方法上,也可以添加在类上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue语法--完成购物车案例

一、模版语法 1.1 插值 Vue.js 使用了基于 HTML 的模板语法&#xff0c;允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML &#xff0c;所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom&#xff0c;结合响应系统…

9.19数电——触发器状态机第四周作业题解计数器(部分)

触发器 RS 1.输出置0 2.置1 3.输出保持不变 S&#xff1a;是置位信号&#xff0c;为1时说要置为1&#xff1b;为0时要置为0&#xff1b; R&#xff1a;是复位信号&#xff0c;为1时就要无条件置为0&#xff0c;为0时保持寄存器原状态 如果要置为0&#xff0c;必要条件…

Putty连接服务器

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

027-从零搭建微服务-搜索服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

华清远见第六课程day10作业

保纯 //保存按钮对应的槽函数 void Widget::on_saveBtn_clicked() {QString fileName QFileDialog::getSaveFileName(this, "保存文件", "./", "All(*.*);;Images (*.png *.xpm *.jpg);;Text files(*.txt);;XML …

PyG-GCN-Cora(在Cora数据集上应用GCN做节点分类)

文章目录 model.pymain.py参数设置注意事项运行图 model.py import torch.nn as nn from torch_geometric.nn import GCNConv import torch.nn.functional as F class gcn_cls(nn.Module):def __init__(self,in_dim,hid_dim,out_dim,dropout_size0.5):super(gcn_cls,self).__i…

【PyTorch 攻略】(6-7/7)

一、说明 本篇介绍模型模型的参数&#xff0c;模型推理和使用&#xff0c;保存加载。 二、训练参数和模型 在本单元中&#xff0c;我们将了解如何加载模型及其持久参数状态和推理模型预测。为了加载模型&#xff0c;我们将定义模型类&#xff0c;其中包含用于训练模型的神经网…

CockroachDB集群部署

CockroachDB集群部署 1、CockroachDB简介 CockroachDB(有时简称为CRDB)是一个免费的、开源的分布式 SQL 数据库&#xff0c;它建立在一个事务性和强一致性的键 值存储之上。它由 PebbleDB(一个受 RocksDB/leveldb 启发的 K/B 存储库)支持&#xff0c;并使用 Raft 分布式共识…

利用Java EE相关技术实现一个简单的Web聊天室系统

利用Java EE相关技术实现一个简单的Web聊天室系统 &#xff08;1&#xff09;编写一个登录页面&#xff0c;登录信息中有用户名和密码&#xff0c;分别用两个按钮来提交和重置登录信息。 &#xff08;2&#xff09;通过请求指派来处理用户提交的登录信息&#xff0c;如果用户名…

基于YOLOv8模型的烟火目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的烟火目标检测系统可用于日常生活中检测与定位烟火目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

linux中的开发工具

在刚开始使用linux的时候&#xff0c;我们需要在系统上写一些简单的代码&#xff0c;来熟悉环境以及各种指令 并且熟悉属于linux的一套开发的环境&#xff0c;而这对于c来说需要三个软件就可以进行简单的编码 和使用&#xff0c;让我们来认识一下下列工具&#xff0c;以及工具的…

【Java 基础篇】Java字符打印流详解:文本数据的输出利器

在Java编程中&#xff0c;我们经常需要将数据输出到文件或其他输出源中。Java提供了多种输出流来帮助我们完成这项任务&#xff0c;其中字符打印流是一个非常有用的工具。本文将详细介绍Java字符打印流的用法&#xff0c;以及如何在实际编程中充分利用它。 什么是字符打印流&a…

电脑丢失d3dcompiler47.dll怎么办,这个四个修复方法都可以解决

d3dcompiler_47.dll 是一个与 DirectX 相关的动态链接库文件&#xff0c;它包含了 DirectX 编译器的一些函数和类&#xff0c;对于许多应用程序和游戏来说都是必需的。如果您的系统中缺失了这个文件&#xff0c;可能会导致程序无法正常运行。下面我们将介绍四个修复 d3dcompile…

(图论) 1020. 飞地的数量 ——【Leetcode每日一题】

❓ 1020. 飞地的数量 难度&#xff1a;中等 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个 海洋单元格、1 表示一个 陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 grid 的边…

vant 组件库的基本使用

文章目录 vant组件库1、什么是组件库2、vant组件 全部导入 和 按需导入的区别3、全部导入的使用步骤&#xff1a;4、按需导入的使用步骤&#xff1a;5、封装vant文件包 vant组件库 该项目将使用到vant-ui组件库&#xff0c;这里的目标就是认识他&#xff0c;铺垫知识 1、什么…

PyG-GAT-Cora(在Cora数据集上应用GAT做节点分类)

文章目录 model.pymain.py参数设置运行图 model.py import torch.nn as nn from torch_geometric.nn import GATConv import torch.nn.functional as F class gat_cls(nn.Module):def __init__(self,in_dim,hid_dim,out_dim,dropout_size0.5):super(gat_cls,self).__init__()s…

安达发APS|国货品牌崛起,制造业迎来智能排产新机遇

随着国货品牌的不断崛起&#xff0c;制造业的生产也面临着巨大的挑战。为应对这一挑战&#xff0c;越来越多的企业开始引入APS智能排产技术&#xff0c;以优化生产线布局、提升设备利用率、缩短生产周期、减少生产成本&#xff0c;从而增强市场竞争力。本文将为您详细解读APS智…

数据结构-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)

目录 前言 栈 1.定义 2.栈的特点 3.栈的储存方式 3.1数组栈 3.2链栈 4.栈的基本操作&#xff08;C语言&#xff09; 4.1初始化 4.2判断是否满栈 4.3判断空栈 4.4 入栈 4.5 出栈 4.6获取栈顶元素 4.7遍历栈 4.8清空栈 完整代码示例 前言 大家好呀&#xff01;今天我…

登录业务实现

登录业务实现&#xff1a; 登录成功/失败实现 -> pinia管理用户数据及数据持久化 -> 不同登录状态的模板适配 -> 请求拦截器携带token -> 退出登录实现 -> token失效&#xff08;401响应拦截&#xff09; 1. 登录成功/失败实现 当表单校验通过时&a…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署odoo开源ERP平台

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署odoo开源ERP平台 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例使用场景1.3 云耀云服务器L实例特点 二、odoo介绍2.1 odoo简介2.2 odoo特点 三、本次实践介绍3.1 本次实践简介3.2 本…