Springboot初识--Bean的理解

2023-10-27

注解下的Spring Ioc.

Spring所提供的两个核心理念,一个是控制反转(Inversion of Control,IoC),另一个是面向切面编程(Aspect Oriented Progarmming,AOP),IoC容器是spring的核心,可以说是Spring是一种基于IoC容器编程的框架(我更喜欢称之为CRUD框架),因为Spring Boot是基于注解的开发Spring IoC,,所以我们使用全注解的方式来理解Spring IoC技术。
在初学java的时候,我们更喜欢用new来创建对象,而在Spring中却不是,它是通过描述来创建对象的。Spring Boot中并不建议你用xml,而是通过注解的描述来生成对象。
一个系统可以生成多个对象,并且对这些对象进行管理,对象之间不是独立,相互之间还存在依赖关系。例如一个班级是由多个学生和老师组成的,那么一个班级就是依赖于学生和老师,老师和学生之间又是相互有关联的。为此Spring还提供了依赖注入的功能,是我们能够通过描述来管理各个对象的关系。
为了描述上述的班级,同学,老师这三个对象的关系,我们需要一个容器。在Spring中把每一个需要管理的对象称之为Spring Bean,而Spring管理这Bean的容器,被我们称之为Spring IoC容器。IoC容器需要具备两个基本功能:

  • 通过管理描述Bean,包括发布和获取Bean;
  • 通过描述完成Bean之间依赖的关系;

IoC容器简介

Spring IoC容器是一个管理Bean的容器,在Spring的定义中,他需要所有的接口都实现接口BeanFactory,他是一个顶级容器。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.beans.factory;

import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;

public interface BeanFactory {
    String FACTORY_BEAN_PREFIX = "&";
	//多个获取bean的方法
    Object getBean(String var1) throws BeansException;
	
    <T> T getBean(String var1, Class<T> var2) throws BeansException;

    Object getBean(String var1, Object... var2) throws BeansException;

    <T> T getBean(Class<T> var1) throws BeansException;

    <T> T getBean(Class<T> var1, Object... var2) throws BeansException;
	//注入方法(具体功能还没深入理解)
    <T> ObjectProvider<T> getBeanProvider(Class<T> var1);

    <T> ObjectProvider<T> getBeanProvider(ResolvableType var1);
	//是否包含bean
    boolean containsBean(String var1);
	//bean是否单例
    boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
	//bean是否原型
    boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
	//bean类型匹配
    boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
	//获取类型
    @Nullable
    Class<?> getType(String var1) throws NoSuchBeanDefinitionException;

    @Nullable
    Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;
	//获取别名
    String[] getAliases(String var1);
}

在源码中可以看到多个getBean的方法,这些是从IoC容器中获取Bean的重要方法,isSingleton方法判断Bean是否在SpringIoC中为单例,,在默认请看下,Bean都是以单例为存在的,也就是使用getBean返回的对象都是同一个,如果isPrototype返回为true,那么我们使用getBean方法获取Bean的时候,SpringIoC容器就会创建一个新的Bean给调用者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot初识--Bean的理解 的相关文章

  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • java字符串s-director_Gradle 2.0 用户指南翻译——第二十三章. Java 插件

    翻译项目请关注Github上的地址 https github com msdx gradledoc本文翻译所在分支 https github com msdx gradledoc tree 2 0 在线浏览地址 http gradledoc
  • linux内核使用make编译出错,编译Linux内核出现错误:make vexpress_defconfig & menuconfig...

    在编译Linux内核时出现错误 wit ubuntu home linux 5 4 14 make vexpress defconfig LEX scripts kconfig lexer lex c bin sh 1 flex not f
  • 服务启动后,一直连接本地nacos

    近期负责整改项目 让nacos只做服务注册和发现 不再做配置管理 踩了一个坑 记录一下 现象 服务的bootstrap文件或application文件中配置了nacos远程地址 但服务启动后一直连接localhost 8848 原因 nac
  • 汇编基础(1)--ARM32

    简介 ARM32位架构的回顾 汇编语言的定义和作用 寄存器 ARM32位架构中的寄存器 特殊寄存器的概述 寄存器的使用方法和规则 指令 指令的分类和指令格式 常用指令和用法 如数据传输指令 算术运算指令 条件分支指令等 指令的组合和控制流程
  • 事务的相关内容

    1 事务 事务 Transaction 是一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元 1 事务的语法 2 事务的特性 3 事务的并发问题 4 事务的隔离级别 1 1 事务的语法 1 开启事务 start transa
  • VMware Workstation 与 Device/Credential Guard 不兼容 解决方案

    win10专业版官方解决方案 https kb vmware com s article 2146361 win10家庭版解决方案 win10家庭版本身是不支持Hyper V服务的 但是如果是 win10预览体验家庭版 会在 服务 中发现有
  • Arduino - 看门狗定时器(WDT:Watch Dog Timer)

    看门狗定时器 WDT Watch Dog Timer 实际上是一个计数器 一般给看门狗一个大数 程序开始运行后看门狗开始倒计数 如果程序运行正常 过一段时间CPU应该发出指令让看门狗复位 令其重新开始倒计数 如果看门狗计数减到0 就认为程序
  • 针对于CentOS8安装docker与compose的教程

    针对安装持续报错问题 为了避免掉坑 请跟着教程一步步来 安装完centOS 8系统之后 我们先配置一个国内的yum源 先确保网络的连通 这是我的版本号 1 首先进入 etc yum repos d 目录下 新建一个bak目录 用于保存系统中
  • ArgumentException:Input Axis vertical is not setup.

  • Windows下通过远程桌面连接向远程电脑传输文件

    一 打开远程桌面连接 在搜索框中输入 远程桌面连接 进入下面的界面 二 配置连接 点击显示选项 选择本地资源 查看详细信息 选择要使用的磁盘 我要使用D盘中的文件 所以勾选了D盘 确定后点击连接 三 传输文件 连接到远程服务器 打开文件管理
  • 在STM32上运行ROS节点——rosserial&stm32开发及调试方法

    近期接手了一些ROS机器人项目 这里将开发中遇到的问题和解决方法记录下来 stm32强大的外设资源为机器人底层设备控制带来了极大的便利 本文简述借助rosserial项目在stm32中运行ROS节点的方法 基本原理 ref http wik
  • 什么是数据湖 Data Lake

    什么是数据湖 Data Lake 背景 随着近几年机器学习的兴起对数据的需求更加灵活 如果从数据仓库中提数会有一些问题 比如 数据都是结构化的 做算法的经常要理解数仓模型 甚至要深入到做了什么业务处理 很多处理都不是他们想要的 数据是经过处
  • 转置矩阵(matrix transpose)和逆矩阵(matrix inverse)的相关公式

    转载自 https blog csdn net yinhun2012 article details 84236202 这一篇是为了后面着色效果的数学基础做积累 之前我们使用矩阵的大部分情况都是直接的仿射空间变换 就是仿射空间A变换到仿射空
  • Android:ARouter原理源码解析

    文章目录 前言 一 ARouter使用 二 ARouter初始化 init 函数 整体 LogisticsCenter初始化 拦截器初始化 三 跳转解析 跳转 总结 前言 一 ARouter使用 ARouter的基本使用请参考这篇博客 AR
  • 分治03--二叉搜索树和双向链表

    分治03 二叉搜索树和双向链表 jz26 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 输入一棵二叉搜索树 将该二叉搜索树转换成一个排序的双向链表 要求不能创建任何新的结点 只能调整树中结点指针的指向 测试用例 输入 10
  • Thinkcmf 后台弹框页面代码

    thinkcmf是基于layer做的弹出层 https www layui com doc modules layer html 可以看layer的文档学习 选择信息 列表展示 html页面
  • Failed to remove the service because the service is running Stop the service and try again解决方法

    解决方法 Failed to remove the service because the service is running Stop the service and try again mysqld remove 报错 在Window
  • 微信回调 java_详解APP微信支付(java后台_统一下单和回调)

    1 微信配置信息 global properties 2 方法wxpay用于生成预支付订单信息 方法notifyWeiXinPay用于微信支付成功后的回调 注意 在手机端使用微信支付成功后 微信服务器会根据提供的回调地址进行回调 param
  • JavaWeb笔记:第07章 MVC

    JavaWeb笔记 第07章 MVC EL JST Filter Listener JQuery AJAX Maven JSON Redis Linux Nginx 1 MVC 开发模式 2 EL表达式 2 1 概念 作用 语法 2 2 E
  • Springboot初识--Bean的理解

    注解下的Spring Ioc Spring所提供的两个核心理念 一个是控制反转 Inversion of Control IoC 另一个是面向切面编程 Aspect Oriented Progarmming AOP IoC容器是spring