【java小白入门】理解spring框架的核心—IOC

ZEMAX学习 6.一个照相物镜的设计 曲线越平滑表示场曲越小,曲线越接近水平,系统边缘与中心对比度越接近,虚实越接近表示色差和色散越好;第1个面设计不合理,出现前后表面相交的情况,点击第1面厚度,选择边缘厚度,设置为0.1,第1面厚度被控制在0.1mm厚,系统根据这一设置始终保持第1面边缘厚度为0.1mm。要求:设计一个照相物镜,焦距f=9mm,F#为4,视场角40°;添加有效焦距操作数EFFL 9mm 权重为1,设置优化变量,如下图,ctrl+shift+o打开优化界面。报告中系统数据有效焦距为67.381mm,设计要求为9mm; 阅读详情

java入门小白,文章内容仅代表个人理解,不保证其正确性。

学习javaWEB到一定阶段开始接触框架,绕不开的当属spring框架,而spring框架的核心之一就是IOC,对于初学者来说这两个概念真的不容易理解,直到现在可能我的有些理解都还有错误,本人刚学习java两个月左右,仅从个人角度出发谈一谈对IOC的理解。文章偏理论,主要讲原理,涉及少量具体实现代码。

spring的核心组件主要有三个:Bean、Context和Core,Bean本人的简单理解就是实体类,与数据库中的数据对应的类,也可以理解为,IOC既然是容器,那么它存放的是什么呢,自然存放的是数据,就是这些类。Context是发现,创建并管理这些类之间关系的容器,即IOC。Core是spring内部发现创建并维护这些类之间关系的工具。

第一部分IOC

  首先要记住的是IOC是一个容器,现在不理解没关系,要先在头脑中有一个意识,“IOC是一个容器”,IOC是什么,一搜一大把的答案,IOC就是控制反转,也可以叫做依赖注入,还是觉得很模糊,说了当没说,不要急慢慢继续往下看。
  1、IOC为什么会出现?它给我们带来了什么?它为我们做了哪些事?
(1)首先回想一下我们在定义类时,如果一个类要使用另一个类中的方法,按照传统方式需要先在一个类中创建另一个的对象,利用对象来调用那个类中的方法,回想一下之前写过的一些java程序代码是不是这样的。这样一来两个类就有了依赖,用专业的话说耦合性加强了,显然这不符合编程的思想。
(2)学习了spring框架之后我们学会了在配置文件中使用<bean>标签来两个有关联的类设置属性,关键术语叫做,属性注入,其实就是利用<bean>标签给类设置属性,大概的代码样式如下:
<bean id="sa" class="com.yc.A" ></bean><!--相当于创建一个A类的实例,使用id值sa就可以使用这个A类的实例,等价于A sa=new A()-->
<bean id="sb" class="com.yc.B">//等价于B sb=new B();创建对象操作
<property name="a" ref="sa"/><!-- 给“类B”的“a属性”设置一个值,属性值是sa(上面那个标签dingyilsa是A的实例)相当于调用类中的setter方法-->
<constructor-arg ref="sa"/><!-- 给类B创建一个构造函数,参数是sa(sa是A的实例) -->
</bean>
这样就在配置文件中利用bean标签实例化了两个类,并建立了两个类之间的联系,那么在测试时怎样获取两个类呢?
public class Test {
public static void main(String[] args) {
BeanFactory bf=new ClassPathXmlApplicationContext("spring-cfg.xml");//加载配置文件,引号内是放有bean标签配置的配置文件名称
B b=(B) bf.getBean("sb");//利用getBean()方法创建一个B的实例,注意此时没有用到传统的创建对象的方法,即B b=new B();
b.getA().a();//通过B的getA()方法获取一个A的实例,getA()方法返回一个A类的实例,注意此时也没有创建A类的实例,调用a()的方法
}
}
这样一来将类的实例化和类之间的依赖关系都放到了配置文件中,降低了类与类之间的耦合性,直接通过配置文件就得到了对象,可能在小项目中看不出这样做的优势,但在大型项目中优势很明显,降低了耦合性,提高了可重用性;缺点是每次都要自己去书写<bean>标签,然后加载配置文件,通过getBean()方法获取对象,非常的麻烦。接着就有了第三种方式的存在,使用注解:
  (3)利用注解让spring框架自动去创建<bean>标签,开发人员只需要使用,不需要前面的设置<bean>,加载配置文件,调用getBean()方法等步骤,进一步简化了程序,那么是如何实现的呢?
只需要在要使用的类声明前加上@Autowired注解就可以了,如
@Autowired
private UserService us;//在类的内部设置声明属性
相当于“spring去帮我把当前类和其他类的依赖关系发现,创建并维护一下”,省去了大量的<bean>标签中的属性注入,即<property>设置;
在web开发中绕不开的Controller层和Service层也是使用的注解,注意此时的Controller和Service只是普通类(有时候越学到后面越容易忘记基本的东西),给类加上Controller和Service注解后相当于连<bean>节点都不用在配置文件中写了。
整个项目只需要在spring配置文件中加上支持注解的代码(支持注解的意思是,让spring自动去扫描项目,发现注解,发现有相关注解就自动设置一下<bean>标签,并为其注入属性):
<context:component-scan base-package="com.yc.*">
</context:component-scan>//扫描指定路径下的包,发现注解,并自动为其建立依赖关系;

在类中使用@service和@Controller注解,spring为我们做了两件事,一是新创建一个<bean>节点标签,二是设置<bean>的id是小写的类名。在类中的属性声明上使用@AutoWired注解相当于自动设置了<property>标签和<constructor-arg>标签

而帮我们自动去发现并创建依赖关系的这个容器就叫做IOC,回应前面说到的,IOC只是一个容器。它的出现让类与类之间的耦合性降低了,它帮我们自动建立了类与类之间的依赖关系,开发人员只需要使用,不需要手动去创建对象。

总而言之,spring框架中的IOC就是通过注解的方式简化了配置文件中<bean>节点的设置,而<bean>节点的作用就自动创建类,并给各个类通过属性注入的方式(<property>标签)建立依赖关系。开发人员只需声明和使用,不需手动new对象,而管理这些类的容器就叫做IOC。

这样一来就可以回答开头提出的三个问题,IOC为什么会出现?因为手动在一个类中建立另一个类的实例,类与类之间的耦合性太高,不利于程序的二次利用。

它给我们带来了什么?它给我们带来了程序开发的便利,开发人员不用手动创建类和手动设置类与类之间的依赖关系。

它为我们做了哪些事?在类上使用注解spring自动为我们创建<bean>节点,即创建对象。在类体中的属性前使用注解,spring自动为我们建立了类与类之间的关系,省去了<property>标签和<constructor-arg>标签,即依赖注入(说成依赖关系注入可能会更容易理解——自动建立类与类之间的依赖关系)。

最后一句,IOC就是发现类与类之间的关系,并为它们建立和维护这段关系(注意控制层、业务逻辑层、dao层Model层都是一个个类,他们之间会相互调用相应的方法,他们之间是有依赖关系的)



Android 15.0 添加自定义服务,并生成jar给第三方app调用 在15.0系统ROM产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能 阅读详情

相关推荐

数字取证双雄:Passware Kit Forensic 与 ElcomSoft 在实战场景下的能力边界解析

本文深入解析了Passware Kit Forensic与ElcomSoft在数字取证实战中的能力边界,涵盖Windows、macOS、iOS和Android系统的密码恢复与数据提取技术。通过真实案例对比两款工具在硬件加速、分布式计算及云取证等场景下的表现差异,为取证专家提供关键决策参考。特别探讨了密码恢复软件在加密设备突破中的核心作用。

weixin_30342209的博客 399

spring IOC和DI源码分析

引言先看下最基本的启动 Spring 容器的例子:public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationfile.xml"); }以上代码就可以利用配置文件来启动一个 Spring 容器了,请...

wyl6019的博客 6559

模电专题-MOS管的放大电路分析

在实际应用中,我们经常会使用到功率MOS,这时通常不会将它当成一个开关使用,而是当成一个放大器来使用,那这就需要让其工作在放大状态。参考下图中的mos管的特性曲线,右图中的输出特性曲线中有一根红色的分界线,这个线就是区分mos管工作状态的分界线,在红线的左边,mos管工作在可变电阻区,也就是线性区;在红线的右边mos管工作在恒流区,也就是饱和区。当然,还有一个截止区。本文分析主要运用模电课本中的理论计算验证。

Anitawen的博客 2万+

Spring框架IoC核心详解

Spring框架IoC核心详解 https://baijiahao.baidu.com/s?id=1613047743708688271&wfr=spider&for=pc

lizhe10177的专栏 334

英伟达笔试1

本文摘要: 使用NAND2门设计4位奇偶校验发生器,通过15个NAND2门实现4输入异或功能,分三级结构完成奇校验计算。 时序分析公式总结: 建立时间约束:T_cq + T_comb(max) + T_setup + T_skew ≤ T_clk 保持时间约束:T_cq + T_comb(min) + T_skew ≥ T_hold 提供了两段路径的具体时序检查公式和建立违规修复方法 分析32位粘滞累积寄存器Verilog代码: 功能:记录输入数据中出现过的所有1位 每个bit独立实现,复位清零,有效输入时

soulermax的博客 166

【学习路线】 游戏客户端开发入门到进阶

游戏开发是一个交叉性极强的技术领域,对开发者提出了高维度的要求。作为初学者,不要急于求成,打牢基础、注重原理、勤于实践,你的成长将会非常快速而稳健。希望这份学习路线与书单能为你指明方向,迈出职业开发者的第一步。

hhw_hhw的博客 2128

Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧)

1.IoC是什么? IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式。 2.IoC解决了什么问题? 在IoC出现以前,组件之间的协调关系是由程序内部代码来控制的,或者说,以前我们使用New关键字来实现两组间之间的依赖关系的。 这种方式就造成了组件之间的互相耦合。IoC(控制反转)就是来解决这个问

Baple的专栏 3万+

unity中简单全景搭建

全景场景能够直观的展现一部分区域的全貌,在全景场景中我们能360°观看周围的景象,仿佛自身就在这个场景中,在场景的外部,我们能发现场景就是一个密封的球体,我们是处在球体的内部观察周围,在球内部观察四周看到的都是球的内表面,所以我们看到的全景其实就是贴在密封球体内的一张全景图片。接下来要介绍的就是如何在unity中用一个球体来搭建全景场景。

qq_31791999的博客 3637

Spring核心容器的详细解析以及IOC和DI和过程全解

1.spring的简介 spring是一个一站式的解决框架,旨在解决企业开发中各个层级之间的问题. 所谓一站式的解决方案:就是spring可以支持我们各个层级包括数据展示层,业务层和持久层都有对应的解决方案. Spring的出现是为了取代 EJB(Enterprise JavaBean)开发模式的臃肿,低效,脱离现实 2.spring优点 方便解耦,简化开发 AOP编程的支持 申明式

鲁边的博客 2043

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6033

深入解析 OpenClaw(小龙虾)源码:架构设计与核心实现

OpenClaw用清晰、工程化的代码结构,将复杂的Agent交互流程变成了可管理、可扩展的流水线。无论是想深入了解Agent系统设计,还是希望二次开发定制自己的AI助理,阅读OpenClaw源码都是一次绝佳的学习旅程。希望本文能帮助你快速掌握OpenClaw的核心脉络。如果你对某个模块(如技能开发、安全机制)感兴趣,欢迎继续探讨。本文基于OpenClaw社区版本源码分析,具体实现可能随版本迭代有所调整,请以最新源码为准。

Ven%的博客 449

Spring 框架基础(01):核心组件总结,基础环境搭建

本文源码:GitHub·点这里 || GitEE·点这里 一、Spring框架 1、框架简介 Spring是一个开源框架,框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合...

weixin_30561425的博客 319

【26美赛B题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛数学建模B题解析与备赛指南:本文针对B题"数据+预测+决策优化"的特点,提出通用建模路线图,包含数据预处理、特征工程、预测模型构建、策略优化和稳定性验证等关键环节。提供赛题拆解方法、Python/Matlab双实现方案、AI辅助建模技巧及论文写作模板。适用于2026美赛B题参赛者及其他数学建模竞赛选手,帮助掌握从数据到决策的闭环建模流程,特别强调逻辑严谨性和结果可视化呈现。订阅者可获取历年真题解析和持续更新的备赛资源。

一键难忘的博客 2110

【Java开发】Java热门框架深入开发第1篇:学习目标,一、Spring简介【附代码文档】

学习目标 一、Spring简介 2 初识Spring 3 Spring体系结构 二、IOC和DI入门案例【重点】 五、Bean的生命周期【了解】 问题导入 1 生命周期相关概念介绍 2 代码演示 3 Bean销毁时机 六、依赖注入(DI配置) 1 依赖注入方式【重点】 2 依赖自动装配【理解】 3 集合注入 今日目标 一、第三方资源配置管理 1 管理DataSource连接池对象 2 加载properties属性文件【重点】 四、Spring整合其他技术【重点】 二、AOP案例 1 案例-测量业务层接口万次

小帅说java 1011

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring5 框架概述+入门案例

一、概述 1、Spring 是轻量级的开源的 JavaEE 框架 2、Spring 可以解决企业应用开发的复杂性 3、Spring 有两个核心部分:IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理 (2)Aop:面向切面,不修改源代码进行功能增强 4、Spring 特点 (1)方便解耦,简化开发 (2)Aop 编程支持 (3)方便程序测试 (4)方便和其他框架进行整合 (5)方便进行事务操作 ( 6)降低 API 开发难度 二、入门案例S.

Within的博客 406

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring学习笔记之入门小案例

以下学习内容以Spring5.x为准! Spring框架概述 1、Spring是轻量级的开源的JavaEE框架。 2、Spring可以解决企业应用开发的复杂性。 3、Spring有两个核心部分:IOC和AOP IOC:控制反转,把对象的创建和对象之间的调用过程,交给Spring进行管理,目的是为了降低耦合度。 AOP:面向切面编程,不修改源代码进行功能增强。 入门小案例 1、下载Spring(下载地址:https://repo.spring.io/release/or...

weixin_44020400的博客 138

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

spring ioc原理

最近,买了本Spring入门书:spring In Action 。大致浏览了下感觉还不错。就是入门了点。Manning的书还是不错的,我虽然不像哪些只看Manning书的人那样专注于Manning,但怀着崇敬 的心情和激情通览了一遍。又一次接受了IOC 、DI、AOP等Spring核心概念。 先就IOC和DI谈一点我的看法。 IOC(DI): 其实这个Spring架构核心的概念没有这么...

rq2的专栏 170

Spring入门第一讲——Spring框架的快速入门

Spring的概述什么是Spring据度娘所载: Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Exp

李阿昀的博客 14万+

Spring框架及Spring IoC核心容器介绍

SpringIoC核心容器介绍及其使用方式,推荐注解+配置类!!

weixin_44525733的博客 2514

Spring 框架入门介绍及IoC的三种注入方式

- 用Spring框架来实现全新的控制反转方法,让你的应用程序更加灵活和易于维护 - 创建一个基于Spring框架的控制反转教程,帮助开发人员更好地理解和运用这个设计模式 - 探索Spring框架中控制反转的潜在优势,包括减少模块之间的耦合、提升可测试性和可扩展性 - 设计一个创新的Spring应用程序,利用控制反转实现模块之间的松耦合关系 - 分析控制反转在Spring框架中的实际应用,包括依赖注入和依赖查找的使用场景

让优秀成为一种习惯! 2831

Spring框架核心之IoC容器

本文详细介绍了Spring框架的概念、核心模块IOC 容器以及DI的概念、使用。

weixin_52176709的博客 1383

Spring框架—Spring的IOC核心技术

文章详细介绍了Spring的IoC容器实现,包括Bean的创建、依赖注入和生命周期管理,并通过示例代码演示了如何通过XML配置方式实现IoC的基本应用

2401_84284464的博客 1010

Java Spring框架的核心原理详解

Java Spring框架的核心原理详解

感谢阅读 1917

Spring框架——IOC核心技术

IOC(Inversion of Control)即控制反转,是面向对象编程中的一种设计原则,用来降低代码之间的耦合度。

2302_79781252的博客 871

Spring 框架从入门到精通(第一篇)—— 框架核心与 IOC 容器实践

摘要: 本文是Spring系列教程的第一篇,重点讲解Spring的核心概念IOC容器及其在企业级开发中的应用。首先分析了传统JavaEE开发的痛点(高耦合、低扩展性、重复代码),并阐述Spring通过IOC和DI实现解耦与自动化管理的解决方案。详细演示了Spring环境的搭建(Maven配置、XML/注解方式)、IOC容器创建对象的5种方式,以及Bean的作用域与生命周期管理(初始化/销毁方法)。最后总结Spring通过容器管理对象的设计思想,为后续学习依赖注入和AOP奠定基础。

a15585391608的博客 1435

深入理解Spring IOC

我们在最开始学习 Spring 的时候,就接触 IOC 了,IOC是Spring相对比较核心的概念,本文上面五个体系可以说是 Spring IOC 中最核心的部分,只有深入理解了IOC,在我们阅读Spring源码的时候,我们才能够更更加清晰。

小徐的博客 2019
上一篇: 【javascript学习笔记】利用事件委托机制提高页面运行性能
下一篇: 【java小白入门】理解java反射机制
搬砖工1331
博客等级 码龄10年 10粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值