BeanFactory版本的快速入门

news2025/2/22 19:53:21

目录

IOC原理

IOC工作步骤

开发步骤

实现代码

DI原理

DI工作步骤


IOC原理

  • 在Spring框架中,IOC是通过Bean容器(例如ApplicationContext)来实现的。Bean容器负责管理Bean的创建、依赖关系的注入和对象的生命周期的控制。通过配置文件(例如XML配置文件)或注解等方式(上述代码使通过配置文件的方式),可以告诉容器如何创建和管理Bean。容器在应用程序启动时会读取配置文件,并根据配置文件中的定义,创建和管理Bean。应用程序通过容器获取需要的Bean,而不需要关心Bean的创建和管理细节。 

IOC工作步骤

  • 创建IOC容器:在应用程序启动时,创建IOC容器(例如ApplicationContext)。

  • 配置对象的定义:在IOC容器中配置对象的定义,可以使用配置文件(例如XML配置文件)或注解等方式进行配置。对象的定义包括对象的类型、依赖关系和其他属性等信息。

  • 对象的创建:IOC容器根据对象的定义,负责创建对象的实例。根据配置的方式不同,可以使用构造函数、工厂方法或其他方式来创建对象。

  • 依赖关系的注入:在对象创建的过程中,IOC容器检查对象的依赖关系,并将依赖的对象注入到目标对象中。这可以通过构造函数注入、Setter方法注入或接口注入等方式实现。

  • 对象的生命周期的管理:IOC容器负责管理对象的生命周期,包括对象的初始化和销毁。在对象创建完成后,容器可以调用初始化方法,以执行一些初始化操作。在应用程序关闭或容器销毁时,容器可以调用销毁方法,以执行一些清理操作。

  • 对象的获取:应用程序通过IOC容器获取需要的对象。容器负责管理对象的创建和依赖关系的注入,应用程序只需要声明需要依赖的对象,而不需要关心对象的创建和管理细节。

 

开发步骤

  • 导入Spring的jar包或者maven坐标
  • 定义服务接口以及其实现类
  • 创建beans.xml配置文件,将实现类的信息配置到该xml中
  • 编写测试代码,创建BeanFactory,加载配置文件,获取服务接口示例对象 

实现代码

IDEA创建Spring项目是,使用maven接口已经自动将必要的依赖添加进入pom.xml配置文件中了

  • 接口类以及接口实现类
  • 配置文件
    • <?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="userService" class="com.example.Service.Impl.UserServiceImpl"></bean>
      </beans>
  • 测试代码
    • package com.example.Test;
      
      import com.example.Service.Impl.UserServiceImpl;
      import com.example.Service.UserService;
      import org.springframework.beans.factory.support.DefaultListableBeanFactory;
      import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
      
      public class TestUserServiceBean {
          public static void main(String[] args) {
              // 创建工厂对象
              DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
              // 创建读取器(读取xml文件中的bean对象)
      
              XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); // 当前是XML配置的方式,将读取器与工厂绑定
              // 读取器读取对象给工厂
              reader.loadBeanDefinitions("beans.xml");
              // 获取bean对象
              Object userService =  beanFactory.getBean("userService");
              System.out.println(userService);
          }
      }
      

以上是IOC(反转控制)的工作原理代码实现层.

DI原理

  • 依赖注入是通过IOC容器(例如ApplicationContext)来实现的。容器负责管理对象的创建和依赖关系的注入,应用程序通过容器获取需要的对象,而不需要关心对象的创建和管理细节。

DI工作步骤

  • 配置依赖注入容器:使用Spring的配置文件(如XML配置文件或Java配置类)来配置依赖注入容器。在配置文件中定义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="userService" class="com.example.Service.Impl.UserServiceImpl">
              <property name="userDAO" ref="userDAO"></property>
          </bean>
          <bean id="userDAO" class="com.example.DAO.UserDAO"></bean>
      </beans>
    • 声明了业务层和持久层之间的依赖关系

  • 定义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="userService" class="com.example.Service.Impl.UserServiceImpl">
              <property name="userDAO" ref="userDAO"></property>
          </bean>
          <bean id="userDAO" class="com.example.DAO.UserDAO"></bean>
      </beans>
    • <property>标签的使用

  • 注入依赖项:使用Spring的注解(如@Autowired、@Resource)或配置文件中的属性来注入依赖项。Spring会自动根据配置文件中的定义,将依赖项注入到目标对象中。

    • 注解功能的实现实际上使通过IOC容器(beanFactory或者ApplicationContext来通过依赖关系注入到目标对象中)

    • package com.example.Service.Impl;
      
      import com.example.DAO.UserDAO;
      import com.example.Service.UserService;
      
      public class UserServiceImpl implements UserService {
          // todo beanFactory调用该方法 从容器中获取userDao对象交给方法参数中的userDAO
          public void setUserDAO(UserDAO userDAO) {
              System.out.println(" beanFactory调用该方法 从容器中获取userDao对象交给方法参数中的userDAO" + userDAO);
          }
      }
      
    • 此处采用过的是setter()方法完成依赖注入

  • 使用依赖项:在目标对象中使用已注入的依赖项,通过调用相应的方法或访问属性来实现所需的功能。

开发步骤

  • 定义UserDAO接口类以及其实现类
  • 修改UserServiceImpl代码,通过setter()方法用于接收注入对象
  • 修改beans.xml配置文件,设置依赖关系
    • <?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="userService" class="com.example.Service.Impl.UserServiceImpl">
              <property name="userDAO" ref="userDAO"></property>
          </bean>
          <bean id="userDAO" class="com.example.DAO.UserDAO"></bean>
      </beans>

      ​​​​​​​

    • 其中        <property name="userDAO" ref="userDAO"></property>中的name值与setXXX()方法中的XXX一致,此处对应setUserDAO()

  • 修改测试代码

BeanFactory是Spring框架中的一个核心接口,用于管理和获取bean实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017238.html

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

相关文章

【软件设计师-从小白到大牛】上午题基础篇:第一章 计算机组成与体系结构

文章目录 前言章节提要一、数据的表示&#xff08;进制的转换&#xff09;1、R进制转十进制使用按权展开法2、十进制转R进制使用短除法(余数从下往上排列&#xff09;3、二进制转八进制与十六进制 二、数据的表示&#xff08;原码反码补码移码&#xff09;真题链接 三、数据的表…

国内券商有没有量化交易接口,哪家做的比较好

个人账户实现股票量化程序化自动交易&#xff0c;券商有接口&#xff0c;门槛已降低_股票程序交易接口的博客-CSDN博客 凡是开了量化交易接口的券商做的都不错&#xff0c;关键看适不适合你自己 我在用的是python语言&#xff0c;有本地客户端&#xff0c;随时修改随时调整策略…

基于Java的考编论坛网站的设计与实现(亮点:在线发布帖子、内容评论回复、购买二手物品、在线支付)

考编论坛网站 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 前端界面…

直方图均衡化,画出均衡化后的直方图(数字图像处理大题复习 P2)

文章目录 1. 频率2. 累计直方图3. 取整4. 得到对应关系5. 累加对应关系&#xff0c;得出结果6. 画出均衡化后的直方图 1. 频率 一般题目会给出各个灰度级的概率分布&#xff0c;如果没有给概率&#xff0c;而是给了频率&#xff0c;比如&#xff1a; 在 8x8 的图像中&#xf…

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序

输入描述:第一行输入一个整数(0<N<50)。第二行输入N个升序排列的整数&#xff0c;输入用空格分隔的N个整数。第三行输入想要进行插入的一个整数 输出描述:输出为一行&#xff0c;N 1个有序排列的整数 输入:5 1 6 9 22 30 8 输出:1 6 8 9 22 30 思路&am…

深入理解Kubernetes Pod调试

调试运行中的容器和Pod不像直接调试进程那么容易&#xff0c;本文介绍了通过临时容器共享命名空间的方式调试业务容器进程的方法。原文: Debugging Kubernetes Pods: Deep Dive ZanUnsplash 调试pod最简单的方法是在有问题的pod中执行命令&#xff0c;并尝试排除故障。这种方法…

TS泛型的使用

函数中使用泛型&#xff1a; function identity<T>(arg: T): T {return arg; }let result identity<number>(10); // 传入number类型&#xff0c;返回number类型 console.log(result); // 输出: 10let value identity<string>(Hello); // 传入string类型&a…

【微信小程序】scroll-view的基本使用

| scss里面的.item:nth-child(1) index.wxml <view class"scroll"> <scroll-view scroll-x><navigator url"" wx:for"{{6}}" wx:key"index" class"item"><image class"pic" src"/sta…

12.建造者模式

如果你需要将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示的意图时&#xff0c;我们需要应用于一个设计模式&#xff0c;‘建造者&#xff08;Builder&#xff09;模式’&#xff0c;又叫生成器模式。建造者模式可以将一个产品的内部表象…

差分方程模型:基金运作与管理

背景 诺贝尔奖 在他逝世的前一年&#xff0c;立嘱将其遗产的大部分(约920万美元)作为基金&#xff0c;将每年所得利息分为5份&#xff0c;设立物理、化学、生理或医学、文学及和平5种奖金(即诺贝尔奖)&#xff0c;授予世界各国在这些领域对人类作出重大贡献的人。其中炸药为最…

深度解析shell脚本的命令的原理之ls

ls是一个常用的Unix和Linux命令&#xff0c;它的功能是列出目录内容。当运行ls命令时&#xff0c;操作系统会执行一系列步骤&#xff0c;以获取和显示指定目录中的文件和子目录。以下是对这个命令的深度解析&#xff1a; 解析参数和选项&#xff1a;首先&#xff0c;ls命令会解…

微服务 第三章 Spring Cloud 简介

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 文章目录 系列文章目录[TOC](文章目录) 前言&#xff1a;Spring Cloud是一款基于 Spring Boot 实现的微服务框架1、Spring Cloud 的常用组件如下表所示。2、Spring…

每日一博 - 常见的数据结构

文章目录 概述图解Use Case 概述 &#x1f539; 链表&#xff08;List&#xff09;&#xff1a;用于保存Twitter的信息流。 &#x1f539; 栈&#xff08;Stack&#xff09;&#xff1a;支持文字编辑器的撤销/重做功能。 &#x1f539; 队列&#xff08;Queue&#xff09;&…

【李沐深度学习笔记】数据操作实现

课程地址 数据操作实现p2 数据操作 首先导入PyTorch包&#xff08;import torch)&#xff0c;虽然叫PyTorch&#xff0c;但实际上要导入torch。 import torch张量 张量表示的是一个数值组成的数组&#xff0c;这个数组可以有很多个维度。 # 生成0-11的顺序序列构成的一维…

海康威视热成像实时测温java - 23版

在20年写了一篇实时测温demo博客&#xff0c;看来帮了不少人。今天刚好又有需求&#xff0c;需要采温。也碰到了不少问题&#xff0c;特此记录 1、环境 摄像头&#xff1a;海康 型号&#xff1a;DS-2TD2528T-7/Q 序列&#xff1a;EA0406775 服务器&#xff1a;winServer J…

Leetcode168. Excel表列名称

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题解&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码如下&#xff1a; class Solution {public String convertToTitle(int columnNumber) {StringBuild…

【无公网IP】安装Wnmp并结合内网穿透,实现灵活可靠的外网访问内网服务!

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…

pytorch迁移学习训练图像分类

pytorch迁移学习训练图像分类 一、环境配置二、迁移学习关键代码三、完整代码四、结果对比 代码和图片等资源均来源于哔哩哔哩up主&#xff1a;同济子豪兄 讲解视频&#xff1a;Pytorch迁移学习训练自己的图像分类模型 一、环境配置 1&#xff0c;安装所需的包 pip install …

工业检测 ocr

采用OpenCV和深度学习的钢印识别_菲斯奇的博客-CSDN博客采用OpenCV和深度学习的钢印识别[这个帖子标题党了很久&#xff0c;大概9月初立贴&#xff0c;本来以为比较好做&#xff0c;后来有事情耽搁了&#xff0c;直到现在才有了一些拿得出手的东西。肯定不会太监的。好&#xf…

RL 暂态电路与磁能

前言 RL 电路是一个电阻 R 和 自感线圈 L 组成的 RL 电路&#xff0c;在连接或者接通电源U 的时候&#xff0c;由于自感电动势的作用&#xff0c;电路中的电流不会瞬间改变&#xff0c;而是一个连续的渐变的过程&#xff0c;通常这个时间很短暂&#xff0c;所以被称为暂态过程…