二、Spring IoC 容器

2023-11-16

IOC容器及相关概念

什么是 IOC

  1. 控制反转,把对象创建和对象之间的调用过程,交给 Spring 容器来管理。
  2. 使用 IOC 的目的,为了解耦合。 

IOC 的底层原理 

XML、解析技术、工厂模式、反射

IOC 目的 

最低限度降低类与类之间的耦合度

IOC 实现 

  1.   IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂。
  2. Spring 提供了 IOC 容器两种实现方式
  •  (1) BeanFactory:IOC 容器基本实现接口,是 Spring 内部使用 的接口,不提供给开发人员使用 
  • (2) ApplicationContext:BeanFatory 接口的子接口,提供了更 多更强大的功能,一般由开发人员来使用

 IOC 操作:Bean 管理

在bean标签中有很多属性,介绍常用属性 

  • id属性:唯一标识
  • class属性:类全路径(包+类路径)
  • name属性:类似于id的作用,struts2框架提供的属性,被id属性代替. 

bean标签创建对象时,默认执行的是无参构造器完成对象创建 

什么是 Bean 管理 

  •  Spring 创建对象 
  • Spring 注入属性 

 Bean 管理操作的两种实现方式

  • 基于 XML 配置文件的方式
  • 基于注解方式 

Bean标签范围配置 

 1.当scope=“singleton”时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置Bean实例。
Bean的生命周期:

  • 对象创建:当应用加载,创建容器时,对象就被创建了
  • 对象运行:只要容器在,对象就一直活着
  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁

2.当scope=“prototype”时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:

  • 对象创建:当使用对象时,创建新的对象实例
  • 对象运行:只要对象在使用中,就一直活着
  • 对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了

 Bean生命周期配置

  •  init-method:指定类中的初始化方法名称
  • destory-method:指定类中销毁方法名称

Bean实例化的三种方法 

  •   无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化 

无参构造方法实例化代码演示

(1)创建接口

public interface UserDao {
    public void save();
}

 (2)实现接口方法

public class UserDaoImpl implements UserDao {
    public void save(){
        System.out.println("save running.....");
    }
}

 (3)配置xml文件

 <bean id="userDao" class="com.wzx.dao.impl.UserDaoImpl">

 </bean>

 (4)测试方法

public class UserDaoDemo {
    public static void main(String[] args) {
        ApplicationContext app=
                new ClassPathXmlApplicationContext("bean02.xml");
        UserDao userDao= (UserDao) app.getBean("userDao");
        userDao.save();

    }
}

 (5)运行结果

 

 工厂静态方法实例化代码演示:在无参构造的基础上修改

(1)创建静态工厂类 

public class StaticFactory {
    //静态方法
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

 (2)修改xml配置文件

 <bean id="userDao" class="com.wzx.factory.StaticFactory" 
 factory-method="getUserDao">
 </bean>

 工厂实例方法实例化代码演示:在无参构造的基础上修改

(1)创建工厂对象 

public class DynamicFactory {
    //不是静态的
    public UserDao getUserDao() {
        return new UserDaoImpl();
    }
}

 (2)修改xml配置文件

   <bean id="factory" class="com.wzx.factory.DynamicFactory"></bean>
    <bean id="userDao" factory-bean="factory" 
    factory-method="getUserDao"></bean>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二、Spring IoC 容器 的相关文章

  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 基础回顾5

    JVM JRE JDK JVM表示java虚拟机 Java程序需要运行在虚拟机上 不同平台有自己的虚拟机 所以java可以实现跨平台运行 JRE表示java运行环境 包括java虚拟机和一些核心类库 核心类库主要是java lang包 ja
  • 准考证打印系统关闭怎么办_自考准考证错过打印时间,怎么办?

    点击上方蓝色字关注我们 后台回复 学历 1 5年快速拿正规名校学历 后台回复 优惠 2000元轻松入学升专本 后台回复 冲刺 获取自考备考冲刺模拟卷 后台回复 突击 0元抢占考前突击营名额 1 准考证一般什么时候开始打印 答 自学考试准考证
  • nginx php 错误日志,nginx、php-fpm、php 错误日志的关系

    nginx php fpm php 三者的配置文件中都有 error log 项 指定各自错误日志的保存路径 理论上它们三者的错误应该不会重合 即 nginx error log 记录的是 nginx 进程自己的错误 php fpm err
  • Linux 帧缓冲子系统详解:LCD介绍、framebuffer驱动框架、LCD驱动源码分析

    1 LCD显示屏基础知识介绍 请看博客 嵌入式开发 S5PV210 LCD显示器 2 内核帧缓冲子系统 2 1 功能介绍 1 帧缓冲 framebuffer 是 Linux 为显示设备提供的一个接口 它把显示设备描述成一个缓冲 区 允许应用
  • 简单理解 进程 & 线程

    文章目录 线程与进程之间的区别和联系 进程 线程之间的理解 进程 进程管理 PCB 并行 并发 线程 线程与进程之间的区别和联系 进程包含线程 都是为了实现并发编程的方式 线程比进程更轻量 进程是系统分配资源的基本单位 线程是系统调度执行的
  • python:Numpy学习(二)切片合集

    前言 本文根据本人自己的学习成果总结的 内容难免产生纰漏 如有错误 望各位路过大佬指出 建议按顺序食用本文 效果更佳 文内例子均以二维数组为例 本文主要包含numpy ndarray数组的多种切片方法 在阅读本文前 请思考下面的问题 Q 假
  • 大一自学Java到毕业,学会这些内容,就可以进大厂

    我就是自学Java进的大厂 学校很普通一个不知名的二本 专业是计算机专业 不过在学校学不到什么 基本都是靠自学 我们班进一线大厂的人有6个 我就是其中一个 剩下的人大部分去考研了 下面这个学习安排就是我在大学自学的内容 就适合时间多的大学生
  • 动手学CV-目标检测入门教程6:训练与测试

    3 6 训练与测试 本文来自开源组织 DataWhale CV小组创作的目标检测入门教程 对应开源项目 动手学CV Pytorch 的第3章的内容 教程中涉及的代码也可以在项目中找到 后续会持续更新更多的优质内容 欢迎 如果使用我们教程的内
  • 《软件方法》书中自测题大全-题目全文+分卷自测

    已经根据最新版本内容更新了在线题库 以下是 软件方法 1 8章中的自测题 答案不直接给出 可访问每套题后面的自测链接或扫二维码自测 做到全对才能知道答案 知识点见 软件方法 http www umlchina com book softme
  • Latex 字母上方箭头

    字母上方右箭头 mathop A limits rightarrow A mathop A limits rightarrow A 或者 vec A
  • 一款使用 Jetbrains IDE 开发事半功倍的工具

    使用 Jetbrains 公司开发软件的小伙伴一般都用 Toolbox App 来管理自己的开发软件 这个管理工具使用起来非常舒服 包括安装 更新 还等随心所欲的回滚和降级 这大大节省了维护IDE的时间和精力 IDE 管理 随心打开任意项目
  • c++类成员初始化方式

    转载自 https blog csdn net coder xia article details 7447822 常用的初始化可能如下 1 赋值初始化 class Student public Student string in name
  • 一个主设备号是如何支持多个次设备?

    1 主次设备号 参考博客 字符设备驱动详解 主次设备号 注册 卸载字符设备驱动 创建设备节点 地址映射 2 次设备号介绍 1 在老的驱动程序里是不需要次设备号的 在老版内核中注册驱动用register chrdev 函数 只需要传入主设备号
  • 自旋锁(spinlock) 解释得经典,透彻

    自旋锁与互斥锁有点类似 只是自旋锁不会引起调用者睡眠 如果自旋锁已经被别的执行单元保持 调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁 自旋 一词就是因此而得名 由于自旋锁使用者一般保持锁时间非常短 因此选择自旋而不是睡眠是非常必
  • 解决提示“Warning File ‘CMakeFilesxxxxxx.dirprogress.make‘ has modification time 2.4 s in the future”方法

    问题描述 今天分享一个我自己之前在使用虚拟机中使用cmake进行编译连接时候产生的一个告警提示 首先看告警提示 Warning File CMakeFiles xxxxxx dir progress make has modificatio
  • SMT HT CMP SMP

    1 多线程 同时多线程 Simultaneous multithreading 简称 SMT SMT 可通过复制处理器上的结构状态 让同一个处理器上的多个线程同步执行并共享处理器的执行资源 可最大限度地实现宽发射 乱序的超标量处理 提高处理
  • 多版本node的安装与切换详细操作

    多版本node的安装与切换详细操作 安装多版本node的原因 方法一 利用nvm进行管理 NVM 简介 安装前须知 卸载已安装的nodeJS nvm 的安装与使用 node 的不同版本安装及切换 方法二 通过配置环境变量 切换node时只需
  • Spark课程设计——电影推荐系统

    题目所需数据集及相应信息描述 数据集 1 用户评分数据集ratings dat 包含了大量用户的历史评分数据 2 样本评分数据集personalRatings dat 包含了少数几个用户的个性化评分数据 这些数据反映了某个用户的个性化观影喜
  • python3 隐藏print的标准输出

    在使用python调用函数时 想将函数中的print输出禁止掉又不想改函数的代码 可以定义如下HiddenPrints类解决 class HiddenPrints def enter self self original stdout sy
  • 二、Spring IoC 容器

    IOC容器及相关概念 什么是 IOC 控制反转 把对象创建和对象之间的调用过程 交给 Spring 容器来管理 使用 IOC 的目的 为了解耦合 IOC 的底层原理 XML 解析技术 工厂模式 反射 IOC 目的 最低限度降低类与类之间的耦