返回顶部
首页 > 资讯 > 精选 >Spring实现一个简单的SpringIOC容器
  • 879
分享到

Spring实现一个简单的SpringIOC容器

springioc容器sprin 2023-05-31 16:05:23 879人浏览 安东尼
摘要

接触spring快半年了,前段时间刚用Spring4+S2H4做完了自己的毕设,但是很明显感觉对Spring尤其是ioc容器的实现原理理解的不到位,说白了,就是仅仅停留在会用的阶段,有一颗想读源码的心于是买了一本计文柯的《Spring技术内

接触spring快半年了,前段时间刚用Spring4+S2H4做完了自己的毕设,但是很明显感觉对Spring尤其是ioc容器的实现原理理解的不到位,说白了,就是仅仅停留在会用的阶段,有一颗想读源码的心于是买了一本计文柯的《Spring技术内幕》,第二章没看完,就被我扔一边了,看的那是相当痛苦,深深觉得自己资质尚浅,能力还不够,昨天在网上碰巧看到一个实现简单的SpringioC容器的视频教程,于是跟着做了一遍,竟然相当顺利,至少每一行代码都能理解,于是细心整理了一番,放在这里.

主要思想:

提到IOC,第一反应就是控制反转,我以前以为SpringIOC就是控制反转,控制反转就是SpringIOC,当然这种理解是错误的,控制反转是一种思想,一种模式,而Spring的IOC容器是实现了这种思想这种模式的一个载体.

使用过Spring的人都熟知,SpringIOC容器可以在对象生成或初始化时就直接将数据注入到对象中,如果对象A的属性是另一个对象B,还可以将这个对象B的引用注入到注入到A的数据域中.

如果在初始化对象A的时候,对象B还没有进行初始化,而A又需要对象B作为自己的属性,那么就会用一种递归的方式进行注入,这样就可以把对象的依赖关系清晰有序的建立起来.

IOC容器解决问题的核心就是把创建和管理对象的控制权从具体的业务对象手中抢过来.由IOC容器来管理对象之间的依赖关系,并由IOC容器完成对象的注入.这样就把应用从复杂的对象依赖关系的管理中解放出来,简化了程序的开发过程.

下图是这个简单IOC容器的类图(原谅我真没学过UML,凑合看吧):

Spring实现一个简单的SpringIOC容器

程序中所有的Bean之间的依赖关系我们是放在一个xml文件中进行维护的,就是applicationContext.xml  

ConfigManager类完成的功能是读取xml,并将所有读取到有用的信息封装到我们创建的一个Map<String,Bean>集合中,用来在初始化容器时创建bean对象.

定义一个BeanFactory的接口,接口中有一个getBean(String name)方法,用来返回你想要创建的那个对象.

然后定义一个该接口的实现类ClassPathXmlApplicationContext.就是在这个类的构造方法中,初始化容器,通过调用ConfigManager的方法返回的Map集合,通过反射和内省一一创建bean对象.这里需要注意,对象的创建有两个时间点,这取决与bean标签中scope属性的值:  

  1. 如果scope="singleton",那么对象在容器初始化时就已创建好,用的时候只需要去容器中取即可.
  2. 如果scope="prototype",那么容器中不保存这个bean的实例对象,每次开发者需要使用这个对象时再进行创建.

使用的主要知识点:

  1. dom4j解析xml文件
  2. xpath表达式(用于解析xml中的标签)
  3. java反射机制
  4. 内省(获取Bean属性的set方法进行赋值)

项目结构图及介绍如下:

Spring实现一个简单的SpringIOC容器         

项目需要的jar包与项目结构已经在上图中介绍了,这个项目所能实现的功能如下:

 IOC容器能管理对象的创建以及对象之间的依赖关系.

 能够实现数据的自动类型转换(借助BeanUtils).

 能够实现scope="singleton"和scope="prototype"的功能,即能够控制对象是否为单例.  

下面介绍代码部分:

application.xml:

<?xml version="1.0" encoding="utf-8"?><beans>  <bean name="student" class="com.wang.entity.Student" >    <property name="name" value="123"></property>  </bean>    <bean name="teacher" class="com.wang.entity.Teacher">    <property name="student" ref="student"></property>  </bean>  <bean name="person" class="com.wang.entity.Person" scope="prototype">    <property name="teacher" ref="teacher"></property>    <property name="student" ref="student"></property>  </bean>  </beans>

--结束END--

本文标题: Spring实现一个简单的SpringIOC容器

本文链接: https://lsjlt.com/news/226948.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring实现一个简单的SpringIOC容器
    接触Spring快半年了,前段时间刚用Spring4+S2H4做完了自己的毕设,但是很明显感觉对Spring尤其是IOC容器的实现原理理解的不到位,说白了,就是仅仅停留在会用的阶段,有一颗想读源码的心于是买了一本计文柯的《Spring技术内...
    99+
    2023-05-31
    spring ioc容器 sprin
  • SpringIOC框架的简单实现步骤
    目录简单介绍具体实现首先,咱们先配置一下相关的jar包(pom.xml)创建一个Pet接口,存放方法say()创建一个Person类创建一个Dog类,继承Pet接口重点来了,配置ap...
    99+
    2024-04-02
  • Spring boot实现一个简单的ioc(1)
    前言跳过废话,直接看正文之前参与开发的几个spring的项目,用的版本都3.x, 最近忽然发现spring 5 都快上线了,于是赶紧去关注了下spring的最新动态。发现了spring-boot这个好东西(终于可以从各种错综复杂的xml配置...
    99+
    2023-05-31
    spring boot ioc
  • java Spring Boot2.7实现一个简单的爬虫功能
    首先 我们要在 pom.xml 中注入Jsoup 这是一个简单的java爬虫框架 org.jsoup jsoup 1.14.1 然后这里我们直接用main吧 做简单一点 我们创建一...
    99+
    2023-10-03
    java spring boot 爬虫
  • python实现一个简单的dnspod
    实现一个简单的dnspod解析api:dnspod api地址:https://www.dnspod.cn/docs/records.html#record-create #!/usr/bin/env python # -*- coding...
    99+
    2023-01-31
    简单 python dnspod
  • Android实现一个简单的单词本
    目录布局设计代码AddDanciActivity.javaDBOpenHelper.java效果图总结本文基于Java实现了一个简单的单词本安卓app,用的是SQLite数据库,包括...
    99+
    2024-04-02
  • Java实现一个简单计算器
    先来看看界面效果: 源码如下: package test1;   import java.awt.Frame; import java.awt.TextField; import ...
    99+
    2024-04-02
  • 如何实现一个萌芽版的Spring容器
    这篇文章主要为大家展示了“如何实现一个萌芽版的Spring容器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现一个萌芽版的Spring容器”这篇文章吧。从什么是IOC开始?Spring--...
    99+
    2023-06-29
  • 用Python实现一个简单的WebSoc
    ubuntu下python2.76 windows python 2.79, chrome37 firefox35通过 代码是在别人(cddn有人提问)基础上改的, 主要改动了parsedata和sendmessage这2个函数. 改代码...
    99+
    2023-01-31
    简单 Python WebSoc
  • Android怎么实现一个简单的单词本
    这篇文章主要介绍了Android怎么实现一个简单的单词本的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现一个简单的单词本文章都会有所收获,下面我们一起来看看吧。本文基于Java实现了一个简单...
    99+
    2023-06-29
  • Python实现一个简单的QQ截图
    目录前言一、需求分析二、截图三、矩形选择四、按钮设置总结前言   毕设有一部分要用到类似QQ截图的功能,这里记录制作过程。因为后期要添加人工智能的功能,所以用py...
    99+
    2024-04-02
  • Java如何实现一个简单计算器
    这篇文章主要介绍了Java如何实现一个简单计算器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先来看看界面效果:源码如下:package test1; i...
    99+
    2023-06-22
  • Qt实现一个简单的word文档编辑器
    目录1.先看效果图2.需要用到的类2.1字体选择下拉框:QFontComboBox。2.2颜色对话框:QColorDialog2.3QTextCharFormat3.源码1.先看效果...
    99+
    2024-04-02
  • springboot如何实现一个简单的aop实例
    小编给大家分享一下springboot如何实现一个简单的aop实例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简介AOP(Aspect-Oriented Programming:面向切面编程)aop能将一些繁琐、重复、无...
    99+
    2023-06-25
  • 基于springboot实现一个简单的aop实例
    简介 AOP(Aspect-Oriented Programming:面向切面编程) aop能将一些繁琐、重复、无关业务的逻辑封装起来,在一个地方进行统一处理,常用于日志记录、事务...
    99+
    2024-04-02
  • 如何实现一个简单的区块链
    这篇文章将为大家详细讲解有关如何实现一个简单的区块链,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区块链的基础概念很简单:一个分布式数据库,...
    99+
    2024-04-02
  • 用Python实现一个简单的线程池
    线程池的概念是什么?在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是 如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能...
    99+
    2023-01-31
    线程 简单 Python
  • JavaScript实现一个简单的圣诞游戏
    目录前言实现效果代码CSS代码JS代码html代码演示流程前言 圣诞节快来了,热榜都被一堆圣诞树攻占了,这样的流量密码我怎么会错过,大家都发圣诞树,我就不发啦,直接分享一个圣诞小游...
    99+
    2024-04-02
  • C++实现一个简单的SOAP客户端
    目录1、简介2、实现客户端2.1 准备xml文件2.2 引入库文件2.3 构建请求数据的xml2.4 执行Http协议的POST方法2.5 解析响应数据的xml3、测试客户端1、简介...
    99+
    2024-04-02
  • Java实现一个简单的缓存方法
    缓存是在web开发中经常用到的,将程序经常使用到或调用到的对象存在内存中,或者是耗时较长但又不具有实时性的查询数据放入内存中,在一定程度上可以提高性能和效率。下面我实现了一个简单的缓存,步骤如下。创建缓存对象EntityCache.java...
    99+
    2023-05-31
    java 缓存 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作