java框架-Spring-IOC

文章目录

  • 一、组件注册
    • 包扫描+组件注解
      • 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.mzph.cn/news/86042.shtml

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

相关文章

JavaScript 期约 Promise 总结

同步与异步的概念 JavaScript 是一门单线程的语言&#xff0c;这意味着它在任何给定的时间只能执行一个任务。 然而&#xff0c;JavaScript 通过异步编程技术来处理并发操作&#xff0c;以避免阻塞主线程的情况。 在上图中&#xff0c;同步行为的进程 A 因为等待进程 B 执行完…

elsarticle class not displaying email addresses

See https://tex.stackexchange.com/questions/84573/elsarticle-class-not-displaying-email-addresses

华为OD机试真题-分积木-2023年OD统一考试(B卷)

题目描述: Solo和koko是两兄弟,妈妈给了他们一大堆积木,每块积木上都有自己的重量。现在他们想要将这些积木分成两堆。哥哥Solo负责分配,弟弟koko要求两个人获得的积木总重量“相等”(根据Koko的逻辑),个数可以不同,不然就会哭,但koko只会先将两个数转成二进制再进行加…

iPhone辐射超标,发布三年突然禁售了

昨晚 iPhone 15 预售大家抢到了吗&#xff1f; 虽然13日发布会后大家的反应十分冷静&#xff0c;但身体还是很诚实&#xff0c;官网都排到6-7周以后了... 在大伙都争着第一波尝鲜的时候&#xff0c;有一个地方正准备禁售 iPhone 。 不用想肯定是欧盟某个国家啦&#xff0c;这…

点分治维护dp+连通块上新型dp思路+乘积方面进行根号dp:0922T4

首先连通块&#xff0c;所以点分治肯定是 Trick1 钦定选根的连通块dp 对于钦定选根的连通块dp&#xff0c;有一种常见思路 先对原树求其dfn序&#xff0c;按dfn序倒序求解 具体的&#xff0c;对于当前点 i i i&#xff08;注意这里都是指dfn序&#xff09;&#xff0c;我们…

进程间通信(IPC)的方法:UNIX域套接字

UNIX域套接字(UNIX domain socket)为我们提供了一种在进程之间建立通信通道的便捷方法&#xff0c;具有许多有用的内置功能。它支持面向流(TCP)和面向数据报(UDP)协议作为TCP/IP互联网套接字。我们还可以在阻塞和非阻塞模式之间进行选择。 首先需要创建套接字并在套接字函…

jupyter显示内核启动失败或者网络连接失败——解决办法

问题&#xff1a;jupyter显示内核启动失败或者网络连接失败解决: 重新打开cmd&#xff08;anaconda&#xff09;&#xff0c;新建了一个虚拟环境可以啦参考链接&#xff1a;https://blog.csdn.net/cocoink/article/details/129203225

Qt事件处理

1. 事件 众所周知Qt是一个基于C的框架&#xff0c;主要用来开发带窗口的应用程序&#xff08;不带窗口的也行&#xff0c;但不是主流&#xff09;。我们使用的基于窗口的应用程序都是基于事件&#xff0c;其目的主要是用来实现回调&#xff08;因为只有这样程序的效率才是最高…

基于SpringBoot的旅游系统

基于SpringBootVue的旅游系统、前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;管理员、用户 用户&#xff1a;浏览旅游…

【论文阅读】内存数据库并发控制算法的实验研究

内存数据库并发控制算法的实验研究 原文链接jos.org.cn/jos/article/pdf/6454 摘要 并发控制算法的基本思想归纳为"先定序后检验”&#xff0c;基于该思想对现有各类并发控制算法进行 了重新描述和分类总结&#xff0c;于在开源内存型分布式事务测试床 3TS 上的实际对比实…

spark中结合源码理解reduceByKey、groupByKey、combineByKey等几个ByKey算子的区别

源码版本&#xff1a;pyspark3.1.2 1.combineByKey2.reduceByKey3.groupByKey4.aggregateByKey5.foldByKey总结 1.combineByKey def combineByKey(self, createCombiner, mergeValue, mergeCombiners,numPartitionsNone, partitionFuncportable_hash):"""Generi…

详解TCP/IP协议第四篇:数据在网络中传输方式的分类概述

文章目录 前言 一&#xff1a;面向有连接型与面向无连接型 1&#xff1a;大致概念 2&#xff1a;面向有连接型 3&#xff1a;面向无连接型 二&#xff1a;电路交换与分组交换 1&#xff1a;分组交换概念 2&#xff1a;分组交交换过程 三&#xff1a;根据接收端数量分…

@SpringBootApplication注解说明(InsCode AI 创作助手)

SpringBootApplication 是 Spring Boot 中的一个关键注解&#xff0c;用于标识一个类是 Spring Boot 应用程序的主应用程序类。在这篇文章中&#xff0c;我们将详细解释 SpringBootApplication 注解以及它在 Spring Boot 应用程序中的作用。 SpringBootApplication 注解的作用…

【操作系统】聊聊CPU上下文切换实操

如何查看系统的上下文切换情况 上一篇文章我们说了过多的上下文切换&#xff0c;会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上&#xff0c;那么当出现系统的上下文切换过多的时候&#xff0c;我们如果通过监控指标查看呢。 vmstat 是一个常用的系统性能…

免费玩云上大数据--海汼部落实验室

玩大数据遇到的问题 大家好&#xff0c;这次分享一个免费的大数据部署工具&#xff0c;并非是给人家打广告&#xff0c;试过了真的爽。 学习大数据的人都知道&#xff0c;如果用VMware模拟Linux搭建大数据集群的话我们需要很高的内存和硬盘内存&#xff0c;随随便便跑一下mapre…

【云原生】Kubernetes学习笔记

部署 在部署前强调几点 不要使用IPv6, 很多组件都不支持IPv6不要使用最新版本, 最新版本非常不稳定, 甚至可能存在无法运行的bug不要版本更新, 安装后就将版本固定下来, 新的版本可能会引入新功能, 或移除旧功能, 导致Kubernetes无法运行 Kubeadm介绍 K8s是由多个模块构成的…

2023华为杯数模C题——大规模创新类竞赛评审方案研究

B题——大规模创新类竞赛评审方案研究 思路&#xff1a;采用数据分析等手段改进评分算法性能 完成情况(1-2问已经完成) 代码下载 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比…

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes&#xff0c;需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数&#xff0c;关机重新启动后导致无法进入CentOS7系统&#xff0c;卡在启动进度条界面。 二、解决 多次重启后&#xff0c;在启动日志中发现 Faild to load SELinux poilcy…

简单的自托管书签服务NeonLink

什么是 NeonLink &#xff1f; NeonLink 是一个简单且开源的自托管书签服务。它是轻量级的&#xff0c;使用最少的依赖项&#xff0c;并且易于通过 Docker 安装。由于系统要求较低&#xff0c;该应用程序非常适合部署在 RaspberryPI 上。 安装 在群晖上以 Docker 方式安装。 …

【ES6】

ES6 1 ES6简介1.1 什么是ES61.2 为什么使用ES6 2 ES6的新增语法2.1 let2.2 const2.3 let、const、var的区别2.4 解构赋值2.4.1 数组解构2.4.2 对象解构 2.5 箭头函数2.6 剩余参数 3 ES6的内置对象扩展3.1 Array的扩展方法3.1.1 扩展运算符(展开语法)3.1.2 构造函数方法&#xf…