Spring/IoC、DI、Bean

树莓派上基于ONNXRuntime与Qt的C++模型部署实战指南 本文详细介绍了在树莓派上使用ONNXRuntime与Qt进行C++模型部署的完整流程。从环境配置、依赖安装到交叉编译优化,再到Qt界面集成与ARM架构性能调优,提供了实战指南和常见问题解决方案,帮助开发者高效完成边缘设备上的AI应用部署。 阅读详情

最近在学习SpringBoot,但是发现自己对Spring的一些基础知识不太了解,于是决定先学习Spring相关的一些知识再去了解SpringBoot,此类博客相当于是学习笔记,笔记源自黑马程序员2022新版SSM框架教程

IoC

Inversion of Control,控制反转

使用对象时,由主动new产生对象转换成外部提供对象,对象创建的控制权交给外部,而这个"外部"在Spring里面被称为IoC容器

Bean

被创建或被管理的对象在IoC容器中统称为Bean

DI

Dependency Injection,依赖注入
在IoC容器中建立Bean和Bean之间的依赖关系的整个过程称为依赖注入

实操案例IoC(xml实现)

1.导入Spring坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.22</version>
</dependency>

2.定义Spring管理的类

Dao

public interface TestDao {
  void test();
}
public class TestDaoImpl implements TestDao {

  @Override
  public void test() {
    System.out.println("This is an implementation of TestDao");
  }
}

Service

public interface TestService {
  void test();
}
public class TestServiceImpl implements TestService {

  TestDao dao;
  @Override
  public void test() {
    System.out.println("This is an implementation of TestService");
    dao.test();
  }

  public void setDao(TestDao dao){
    this.dao = dao;
  }
}

3.创建Spring配置文件,配置Bean

创建文件

配置Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <!--配置bean,id,class路径-->
  <bean id="dao" class="com.Learning1.dao.impl.TestDaoImpl"/>
  <bean id="service" class="com.Learning1.service.impl.TestServiceImpl"/>
</beans>

4.初始化IoC容器,获取Bean

public class Test {

  public static void main(String[] args) {
    //加载配置文件得到上下文容器对象
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    //获取资源
    TestService testService = (TestService) ctx.getBean("service");
    testService.test();
  }
}

运行结果:

This is an implementation of TestService
This is an implementation of TestDao

Process finished with exit code 0

实操案例DI(XML)

##1.删除使用new形式创建对象的代码,并设置setter方法

public class TestServiceImpl implements TestService {

  TestDao dao;
  @Override
  public void Test() {
    System.out.println("This is an implementation of TestService");
  }

  private void setDao(TestDao dao){
    this.dao = dao;
  }
}

2.配置service与dao之间的关系

<bean id="service" class="com.Learning1.service.impl.TestServiceImpl">
  <!--name指引用属性的名称,ref指id名-->
  <property name="dao" ref="dao"/>
</bean>

运行结果

This is an implementation of TestService
This is an implementation of TestDao

Process finished with exit code 0

Bean的配置

1.Bean的别名

可以在配置中添加name指定Bean的别名,可以有多个别名,别名之间可用空格,分号,逗号分隔

<bean id="dao" name="testDao testDao1" class="com.Learning1.dao.impl.TestDaoImpl"/>

2.Bean的创建模式

Bean的默认创建模式为单例模式,每次引用同一个类的对象都是同一个对象,以提高效率。
如以下程序

public class Test2 {

  public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    TestService testService1 = (TestService) ctx.getBean("service");
    TestService testService2 = (TestService) ctx.getBean("service");
    System.out.println(testService1);
    System.out.println(testService2);
  }
}

输出结果为

com.Learning1.service.impl.TestServiceImpl@6b09bb57
com.Learning1.service.impl.TestServiceImpl@6b09bb57

Process finished with exit code 0

这个创建模式可以在配置文件中修改,将scope修改为prototype可以使同一个类创建不同的对象

<bean id="service" class="com.Learning1.service.impl.TestServiceImpl" scope="prototype">

再次运行上一个程序

com.Learning1.service.impl.TestServiceImpl@6b09bb57
com.Learning1.service.impl.TestServiceImpl@6536e911

Process finished with exit code 0

Bean的实例化方式

无参构造器实例化

Spring默认会调用Bean的无参构造器实例化Bean,如果没有无参构造器,将会报错

给TestServiceImpl重写一个无参构造器

public class TestServiceImpl implements TestService {

  public TestServiceImpl() {
    System.out.println("Generator is Running....");
  }

  TestDao dao;
  @Override
  public void test() {
    System.out.println("This is an implementation of TestService");
    dao.test();
  }

  public void setDao(TestDao dao){
    this.dao = dao;
  }
}
public class Test3 {

  public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    TestService testService = (TestService) ctx.getBean("service");
  }
}

运行结果

Generator is Running....

Process finished with exit code 0

FactoryBean实例化

通过工厂的方式来实例化Bean也是比较实用的方式

1.创建工厂类

public class TestDaoFactory implements FactoryBean<TestDao> {

  @Override
  public TestDao getObject() throws Exception {
    return new TestDaoImpl();
  }

  @Override
  public Class<?> getObjectType() {
    return TestDao.class;
  }

  @Override
  public boolean isSingleton() {
    return true;
  }
}

其中isSingleton()方法用来设置是否创建单例

2.设置配置文件

<bean id="dao" name="testDao" class="com.Learning1.factory.TestDaoFactoryBean"/>

测试运行

public class Test4 {

  public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    TestDao dao = (TestDao) ctx.getBean("dao");
    System.out.println(dao);
  }
}

运行结果

com.Learning1.dao.impl.TestDaoImpl@192b07fd

Process finished with exit code 0

Bean的生命周期

初始化容器

1.创建对象(内存分配)
2.执行构造方法
3.执行属性注入(set操作)
4.执行bean初始化方法

使用Bean

执行业务逻辑操作

关闭/销毁容器

执行Bean销毁方法


我叫Kallen,一名快乐且有梦的程序员,欢迎访问我的个人博客

手把手教你用MaxEnt+ArcGIS玩转物种分布预测 本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。 阅读详情

相关推荐

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2675

Spring框架原理 | IOC/DI | Bean

Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器,提供了功能强大IOC、AOP及Web MVC等功能

wei_shuo的博客 2203

【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现

前言 在开发一款无线射频产品的时候,软件是一部分,硬件也是一部分。而决定无线收发性能的,首先是硬件的匹配电路,然后才到软件部分的优化。 一款无线射频产品,首先需要先决定是在那个频率范围内(当然是国家允许的范围内),然后硬件则需要在基于这个频点范围进行硬件的参数匹配,具体又分为发送功率匹配、天线匹配、和接收灵敏度的匹配。 现在我们使用2300a这款无线芯片来说,除非自己的团队是射频专家,则可以自己进行无线外围电路的设计外,另外一种更加快捷的方式,就是寻找原厂技术支持,他们会给...

sishuihuahua的博客 7056

4 Spring IOC/DI配置管理第三方bean

前面所讲的知识点都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理?在这一节中,我们将通过一个案例来学习下对于第三方bean该如何进行配置管理。以后我们会用到很多第三方的bean,本次案例将使用咱们前面提到过的数据源和来配置学习下。学习之前,先来准备下案例环境:创建一个Maven项目pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 编写一个运行类App 1.1.2 思路分析 在上述环境下,我们来对数

2301_76721962的博客 1310

渗透测试实战—云渗透(AK/SK泄露)

渗透测试实战思路分享:getshell方法及横向移动方法,云安全(AK/SK泄露)

网安日记本的博客 4051

树莓派5安装ROS1避坑指南:从系统配置到cmake报错全解决

本文详细介绍了在树莓派5上安装ROS1的完整流程,包括系统配置、环境变量设置、cmake报错解决等关键步骤。针对树莓派5的ARM架构特性,提供了从基础安装到高级调试的系统级解决方案,帮助开发者高效部署ROS1并避免常见编译陷阱。特别针对cmake报错问题,给出了深度解析和实用修复方法。

spark7igniter的博客 234

Spring_day02 1.IOC/DI配置管理第三方bean

数据连接池在配置属性的时候,除了可以注入数据库连接四要素外还可以配置很多其他的属性,具体都有哪些属性用到的时候再去查,一般配置基础的四个,其他都有自己的默认值。Druid和C3P0在没有导入mysql驱动包的前提下,一个没报错一个报错,说明Druid在初始化的时候没有去加载驱动,而C3P0刚好相反。方式四:不仅可以加载当前项目还可以加载当前项目所依赖的所有项目的根路径下的properties配置文件。前面所讲的知识点都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理?

tang7mj的博客 934

深入YOLOv8内部核心:用RepNCSPELAN4深度重构主干网络,即插即用的高效涨点方案

本文提出了一种改进YOLOv8目标检测模型的方法,通过在YOLOv8中引入RepNCSPELAN模块来提高检测性能。该模块融合了RepVGG重参数化思想与CSP-ELAN结构,在保持推理速度的同时增强特征表达能力。实验结果表明,改进后的RepNCSPELAN-YOLOv8相比原模型在多项指标上均有提升:准确率从0.84提高到0.86,召回率从0.72提升至0.81,mAP50和mAP50-95也分别提高了0.06和0.04。文章详细介绍了模块设计原理和移植步骤,包括配置文件创建、代码修改等关键环节,为YOL

FJN110的博客 189

一文吃透 Spring 生态核心:IoC/DI 原理、Bean 管理与实战指南

本文系统介绍了Java Spring生态的核心技术,重点解析了Spring、SpringMVC和SpringBoot的关系与区别。文章详细阐述了IoC(控制反转)和DI(依赖注入)的设计思想,通过实例对比传统开发与IoC开发模式的差异。同时深入讲解了Spring中Bean的存储方式(类注解和@Bean方法)、获取方法以及三种依赖注入方式的优缺点。此外,还介绍了解决同类型Bean冲突的方案、Bean命名规则和扫描路径设置等实用技巧,并总结了常见面试考点。全文从概念到实践,帮助开发者全面掌握Spring生态的核

2301_79949064的博客 1304

让 VK31 的条件维护树长出你想要的分支:用 ABAP SE43 扩展定价 Area Menu COND_AV

摘要:本文深入解析了SAP系统中价格条件维护(VK31/VK32)的菜单结构优化方法。通过分析Area Menu(COND_AV)的三层架构(菜单对象、节点、报表),提出将业务语言融入菜单设计的解决方案。重点介绍了使用SE43事务码扩展标准菜单的具体步骤:创建Enhancement ID、新增业务节点、挂接定价报表,并强调需同步验证条件表映射关系。文章还提供了常见问题排查思路,建议从岗位视角重构菜单结构,最终实现高效、精准且符合业务语义的价格维护入口体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 90

RK3568开发笔记- (TX/RX) RGMII delayline 功能调试

本文详细介绍了RK3568芯片RGMII接口delayline功能的调试过程。针对千兆以太网通信不稳定问题,通过分析RGMII时序要求,利用RK3568内置的delayline功能补偿信号延迟。调试方法包括扫描delayline窗口、测试中间值配置、优化硬件设计等步骤。文章还总结了常见问题解决方案,如PHY选型建议和自动扫描功能配置。最终实现了千兆速率下丢包率降至0.01%以下的目标,为类似开发场景提供了实用参考。

flypig has a dream! 318

【Spring】IOC/DI配置管理第三方bean

IOC/DI配置管理第三方bean

jiliangjiyin的博客 264

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring_day02 4.IOC/DI注解开发管理第三方bean

遇到上述问题,我们就需要有一种更加灵活的方式来定义bean,这种方式不能在原始代码上面书写注解,一样能定义bean,这就用到了一个全新的注解==@Bean==。前面定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办?如何来优化下面的代码?中,虽然可以,但是不利于代码阅读和分类管理,所有我们就想能不能按照类别将这些bean配置到不同的配置类中?@Import注解在配置类中只能写一次,下面的方式是==不允许的==

tang7mj的博客 1141

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring bean —— xml方式 IOC/DI思想

xml创建bean IOC/DI

qq_56290939的博客 196

Spring核心概念IOC/DI、IOC容器和Bean原理及实现

Spring核心概念IOC、DI、IOC容器、Bean的原理及实现,具体概念讲解、案例分析,Spring入门必读!

m0_73500410的博客 1363

【Spring】IoC/DI、IoC容器、bean应该如何理解

spring的IoC思想、IoC容器、DI、Bean的概念

PengZyi的博客 388

Spring 核心概念 IOC/DI IOC容器 Bean

Spring 核心概念 IOC/DI IOC容器 Bean

qq_61313896的博客 827

Spring/SpringBoot的IOC、Bean、DI

SpringBoot是基于Spring的快捷版本所以SpringBoot的Ioc、Bean、DI概念本身等于Spring的IoC、Bean、DI。

violinwang 326

【4】【Spring】,【Ioc/DI】,【IoC容器】,【Bean】

主要思想:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想成为控制反转。在容器中建立bean与bean之间依赖关系的整个过程,称为依赖注入。spring提供了一个Ioc容器,用来充当Ioc思想中的“外部”3、被管理的对象交给IoC容器,如何获取到IoC容器?4、IoC容器得到后,如何从容器中获取bean?并且将创建或被管理的对象在Ioc容器中统称为Bean。2、如何将被管理的对象告知IoC容器?(Service和Dao)为了解决不同实现方式耦合度高。

qq_53478650的博客 289

Java——注解开发模式下的 Spring IoC/DI 与 Bean 管理实战

/ 配置Druid数据源(替代XML的<bean>)// 整合MyBatis的SqlSessionFactory适用场景:​第三方库组件(如 MyBatis、Redis 客户端)​需要编程式配置的 Bean(动态参数、条件判断)​。

weixin_44762713的博客 694

Spring的IOC/DI以及Bean实例化方式

(1)IOC快速入门: Ioc它是什么,解决什么问题,它的原理是如何实现。 IOC(inversion of Controller) :控制反转。 在程序中所说的IOC其实简单说,就是原来由我们自己实例化的对象交给spring容器来实始化。这时对象的实始化的权利就会反转。ioc本质上就是通过xml配置文件+反射+factory来完成。在spring中提供一个BeanFactory工厂,我们使用的是...

BullZeng的博客 335

当 new 不再是唯一:Spring IOC/DI 背后的“反射魔法”与 Bean 的生命密码

本文深入解析了Spring框架的核心原理,从IOC/DI设计思想到具体实现。IOC将对象控制权交给容器,DI通过构造器、Setter或字段注入实现依赖管理。Bean是由Spring管理的对象,其生命周期包括实例化、依赖注入、初始化和销毁等阶段。Spring底层通过反射机制动态创建对象、注入依赖并调用生命周期方法,虽然反射存在性能开销,但由于Bean多为单例,实际影响有限。文章还澄清了常见误区,建议优先使用构造器注入,避免在构造器中执行耗时操作。

2503_93374004的博客 644

Spring-IOC/DI-第三方bean-整合mybatis-整合junit

spring第三方bean,整合mybatis,整合junit

小旺财的博客 239

【Spring IOC/DI】bean 的 5 种注册 与 5 种注入

Inversion of Control 控制反转(反转对 bean 的控制)spring ioc 是一个 bean 容器,我们可以将需要的 bean 放入其中Dependency Injection 依赖注入(将 bean 注入进依赖 bean 使用 bean 的类)获取 IOC 容器中的 bean 的方式。

粉墨白伶的博客 1436

Spring02——IOC/DI配置管理、注解管理第三方bean及整合开发

Spring进阶,包含纯注解开发以及Mybatis、Junit的整合

DOVISSSS的博客 264

【Spring篇】IOC/DI配置管理第三方bean

前面所讲的知识点都是基于我们自己写的类,现在如果有需求让我们去管理第三方jar包中的类,该如何管理?一、在这一节中,我们将通过一个案例来学习下对于第三方bean该如何进行配置管理。以后我们会用到很多第三方的bean,本次案例将使用咱们前面提到过的数据源Druid(德鲁伊和C3P0来配置学习下。

Javascript_tsj的博客 8911

【Spring】初始Spring、IoC/DI的简单应用、bean标签的属性

Spring技术初步认识Spring Spring Framework系统架构分析4.x的构架图: 一、核心容器(loC和DI) loC: 第一步: pom.xml关于Spring的坐标第二步:配置文件applicationContext.xml第三步:测试类获取容器: DI: 第四步:改变业务层的new对象第五步:配置service与dao的关系Bean配置 bean的基础配置:id、class;bean的别名配置:name

m0_70083523的博客 393
上一篇: 中小学数学卷子自动生成程序
下一篇: Spring-AOP
南懿烨曦
博客等级 码龄6年 108粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值