Spring Framework - IOC

本文介绍了Spring框架的核心概念之一——IoC控制反转。详细解释了控制反转的概念及其如何通过依赖注入来降低代码耦合度。同时,还探讨了Spring框架中IoC容器的两种实现方式:BeanFactory和ApplicationContext。

IoC 控制反转

一、什么是Spring框架?

官方解释:Spring框架指的是Spring Framework,它是一个分层的面向切面的Java应用程序的一站式轻量解决方案;

两个核心AOPIoC,这两个核心的简单描述如下:

核心描述
AOPAspact Oriented Programming,译为"面向切面编程"。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。
IoCInverse Of Control,译为"控制反转"。指将创建对象的过程交给Spring。

本篇主要记录的是:IoC 控制反转

二、控制反转的个人理解

控制反转(IoC)

​ “控制反转”,即在程序设计中,将对象创建的"控制权"交给Spring的IoC容器,而不是使用new去构造一个对象。传统构建对象的缺点便是代码的耦合度过高,不利于后期的修改与维护,毕竟对于面向对象编程,我个人理解是:尽量杜绝更改程序,而是做到扩展程序。于是在Spring框架中便可以使用XML 配置文件注解Java 配置类等方式,对 Java 对象进行定义。在Spring启动时,IoC容器会自动根据对象定义,将这些对象创建并管理起来。这些被IoC创建并管理的对象被称为"Spring Bean"。

依赖注入(DI)

​ 简单来说,依赖关系就是在一个对象中需要用到另一个对象,即对象中存在的一个属性,该属性是另外一个对象。

三、IoC容器的两种实现

BeanFactory

​ BeanFactory 是 IoC 容器的基本实现,也是 Spring 提供的最简单的 IoC 容器,它提供了 IoC 容器最基本的功能。BeanFactory 采用懒加载(lazy-load)机制,容器在加载配置文件时并不会立刻创建 Java 对象,只有程序中获取(使用)这个对象时才会创建。

注意:BeanFactory 是 Spring 内部使用接口,通常情况下不提供给开发人员使用。

ApplicationContext

​ ApplicationContext是BeanFactory的子接口,是对BeanFactory的扩展。ApplicationContext 在 BeanFactory 的基础上增加了许多企业级的功能,例如 AOP(面向切面编程)、国际化、事务支持等。

实现类描述
ClassPathXmlApplicationContext加载类路径 ClassPath 下指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作
FileSystemXmlApplicationContext加载指定的文件系统路径中指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作
//自动加载类路径下指定的xml配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
//加载指定文件系统路径下指定的xml配置文件
ApplicationContext context = new FileSystemXmlApplicationContext("D:\\eclipe workspace\\spring workspace\\HelloSpring\\src\\Beans.xml");
4.0.0 org.springframework spring-framework-bom 5.3.39 pom Spring Framework (Bill of Materials) Spring Framework (Bill of Materials) https://github.com/spring-projects/spring-framework Spring IO https://spring.io/projects/spring-framework Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0 repo jhoeller Juergen Hoeller jhoeller@pivotal.io scm:git:git://github.com/spring-projects/spring-framework scm:git:git://github.com/spring-projects/spring-framework https://github.com/spring-projects/spring-framework GitHub https://github.com/spring-projects/spring-framework/issues org.springframework spring-aop 5.3.39 org.springframework spring-aspects 5.3.39 org.springframework spring-beans 5.3.39 org.springframework spring-context 5.3.39 org.springframework spring-context-indexer 5.3.39 org.springframework spring-context-support 5.3.39 org.springframework spring-core 5.3.39 org.springframework spring-expression 5.3.39 org.springframework spring-instrument 5.3.39 org.springframework spring-jcl 5.3.39 org.springframework spring-jdbc 5.3.39 org.springframework spring-jms 5.3.39 org.springframework spring-messaging 5.3.39 org.springframework spring-orm 5.3.39 org.springframework spring-oxm 5.3.39 org.springframework spring-r2dbc 5.3.39 org.springframework spring-test 5.3.39 org.springframework spring-tx 5.3.39 org.springframework spring-web 5.3.39 org.springframework spring-webflux 5.3.39 org.springframework spring-webmvc 5.3.39 org.springframework spring-websocket 5.3.39
最新发布
11-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值