什么是 IOC

(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理

(2)使用 IOC 目的:为了耦合度降低

(3)做入门案例就是 IOC 实现

IOC 底层原理

xml 解析、工厂模式、反射

IOC(BeanFactory 接口)

1、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂

2、Spring 提供 IOC 容器实现两种方式:(两个接口)

(1)BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用

  • 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象

    (2)ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
  • 加载配置文件时候就会把在配置文件对象进行创建

    日常开发中,我们都使用ApplicationContext 去获取xml配置信息。

3、ApplicationContext 接口的实现类有哪些?

对FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 的解释

这两者的主要区别在于 读取xml文件的路径。

FileSystemXmlApplicationContext : 读取硬盘中的位置,即要加上盘符如:C://java/xxx.xml

ClassPathXmlApplicationContext: 直接读取当前工程下地址即可。

IOC 操作 Bean 管理(概念)

1、什么是 Bean 管理

Bean 管理指的是两个操作:

(1)Spring 创建对象

(2)Spirng 注入属性

2、Bean 管理操作有两种方式

(1)基于 xml 配置文件方式实现

(2)基于注解方式实现

IOC 操作 Bean 管理(基于 xml 方式)

1、基于 xml 方式创建对象



(1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建

(2)在 bean 标签有很多属性,介绍常用的属性

  • id 属性:唯一标识
  • class 属性:类全路径(包类路径)

(3)创建对象时候,默认也是执行无参数构造方法完成对象创建

2、基于 xml 方式注入属性

(1)DI:依赖注入,就是注入属性

3、第一种注入方式:使用 set 方法进行注入

(1)创建类,定义属性和对应的 set 方法



(2)在 spring 配置文件配置对象创建,配置属性注入

使用 <property></property> 标签完成属性注入,

name:类里面属性的名称

value:向属性注入的值



4、第二种注入方式:使用有参数构造进行注入

(1)创建类,定义属性,创建属性对应有参数构造方法



(2)在 spring 配置文件中进行配置

IOC 操作 Bean 管理(xml 注入其他类型属性)

2、注入属性-外部 bean

1.创建一个UserService类 和 UserDaoImpl 类 和 UserDao接口

2.在UserService中注入UserDaoImpl,并且通过add()方法 再次调用 UserDaoImpl中的update方法

3.在spring配置文件中进行配置

在未使用spring配置文件的情况下,我们是在UserService程序中创建一个UserDao的实现类,通过实现类去调用update方法,在使用spring之后,详细配置文件看下图所示:

3、注入属性-内部 bean

(1)一对多关系:部门和员工

一个部门有多个员工,一个员工属于一个部门

部门是一,员工是多

(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

我们创建两个类,分别是Dept 部门类,Emp 员工类, 其中员工类的属性有Dept,代表着员工所在的部门信息具体类如下:



(3)在 spring 配置文件中进行配置

还有一种写法通过对象.属性的方式进行注入操作。该方法需要有对应的get方法,去得到这个属性

具体步骤如下所示

IOC 操作 Bean 管理(xml 注入集合属性)

1、注入数组类型属性

2、注入 List 集合类型属性

3、注入 Map 集合类型属性

(1)创建类,定义数组、list、map、set 类型属性,生成对应 set 方法



(2)在 spring 配置文件进行配置

如何在List集合中,注入对象属性,即 List<Book> list; 要求这个集合当中的所有属性都是Book类型

1.创建Book类,提供set方法

2.在配置文件中进行配置,配置内容如下

把集合注入部分提取出来

(1)在 spring 配置文件中引入名称空间 util

(2)使用 util 标签完成 list 集合注入提取

(3) 完成对象对List集合属性的注入即对util标签的使用

其实也就是通过<bean> 标签创建对象,然后通过<property>标签对字段进行赋值操作

<ref>标签就是引入util标签内的内容。

IOC 操作 Bean 管理(FactoryBean)

1、Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean)

2、普通 bean:在配置文件中定义 bean 类型就是返回类型


3、工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样

第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean

第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型

IOC 操作 Bean 管理(bean 作用域)

1、在 Spring 里面,设置创建 bean 实例是单实例还是多实例

2、在 Spring 里面,默认情况下,bean 是单实例对象




3、如何设置单实例还是多实例

(1)在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例

(2)scope 属性值

第一个值 默认值,singleton,表示是单实例对象

第二个值 prototype,表示是多实例对象



(3)singleton 和 prototype 区别

第一 singleton 单实例,prototype 多实例

第二 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象

设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用

getBean 方法时候创建多实例对象

IOC(概念和原理)的更多相关文章

  1. IOC概念和原理:BeanFactory 接口与ApplicationContext

    IOC(概念和原理)1.什么是 IOC(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理(2)使用 IOC 目的:为了耦合度降低(3)做入门案例就是 IOC 实现2.IOC ...

  2. Spring之旅第二篇-Spring IOC概念及原理分析

    一.IOC概念 上一篇已经了解了spring的相关概念,并且创建了一个Spring项目.spring中有最重要的两个概念:IOC和AOP,我们先从IOC入手. IOC全称Inversion of Co ...

  3. spring框架的IOC的底层原理

    1.IOC概念:spring容器创建对象并管理 2.IOC的底层原理的具体实现: 1)所使用的技术: (1). dom4j解析xml配置文件 (2).工厂设计模式(解耦合) (3).反射 第一步:配置 ...

  4. IOC的实现原理—反射与工厂模式的结合

    反射机制概念   我们考虑一个场景,如果我们在程序运行时,一个对象想要检视自己所拥有的成员属性,该如何操作?再考虑另一个场景,如果我们想要在运行期获得某个类的Class信息如它的属性.构造方法.一般方 ...

  5. Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)

    ORACLE集群概念和原理(二) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  6. Java中的泛型 (上) - 基本概念和原理

    本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...

  7. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  8. 【转】Bloom Filter布隆过滤器的概念和原理

    转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的 ...

  9. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  10. iptables实用教程(一):基本概念和原理

    概述 iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables). 在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本 ...

随机推荐

  1. 【知识点】C++的日志框架

    常用的 C++ 日志框架 一.日志框架 一个经过专门设计的实用程序,用于规范应用程序的日志记录过程,就是日志框架.   日志框架可以自己编写(需要一定的能力哦),也可以由第三方(例如:log4cplu ...

  2. linux进程后台运行的几种方法 - nohup/setsid/&

    linux进程后台运行的几种方法 - nohup/setsid/& [转载]   我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务 ...

  3. bson的类型

    BSON是JSON的扩展数据类型

  4. linux 操作目录

    脚本 获取一个目录下各子目录中的文件个数 #!/bin/sh find /tmp/homework -maxdepth 1 -type d | while read dir; do count=$(f ...

  5. [NOI2000] 古城之谜

    题目描述 给定 n 和 n 个信息,每个信息包含一个词性 a (只有三种:名,动,辅)和对应的词 mot ,形为" \(a.mot\) ".(一次可能多词性) 最后给一个长度不大于 ...

  6. Springboot中Rest风格请求映射如何开启并使用

    问题引入 因为前端页面只能请求两种方式:GET请求和POST请求,所以就需要后台对其进行处理 解决办法:通过springmvc中提供的HiddenHttpMethodFilter过滤器来实现 而由于我 ...

  7. nmcli device and nmcli connection

    NetworkManager是RHEL 7之后推出的有效管理网络的服务 NetworkManager通过工具nmcli来管理网卡 网卡属于物理硬件,NetworkManager属于软件层面,如何通过软 ...

  8. GDB常用命令整理

    (gdb) break xxx (gdb) b xxx 在源代码指定的某一行设置断点,其中 xxx 用于指定具体打断点的位置. (gdb) run (gdb) r 执行被调试的程序,其会自动在第一个断 ...

  9. 如何让Spring Boot 的配置动起来?

    前言 对于微服务而言配置本地化是个很大的鸡肋,不可能每次需要改个配置都要重新把服务重新启动一遍,因此最终的解决方案都是将配置外部化,托管在一个平台上达到不用重启服务即可一次修改多处生效的目的. 但是对 ...

  10. Gradle入门第一集【下载,安装和测试】

    参考:https://www.cnblogs.com/panchanggui/p/9394760.html 1,http://services.gradle.org/distributions/链接下 ...