Spring总结——Spring容器、Spring中的IoC

Violet ·
更新时间:2024-11-14
· 600 次阅读

文章目录Spring总结Spring容器控制反转(IoC)基于XML的IoC Spring总结 Spring容器

什么是Spring容器

从概念上讲:Spring 容器是 Spring框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。 从代码上讲:一个Spring容器就是某个实现了ApplicationContext接口的类的实例。也就是说,从代码层面,Spring容器其实就是一个ApplicationContext(一个实例化对象)

实例化Spring容器:

Spring最基本的接口就是BeanFactory
BeanFactory有很多实现类,对于大部分的javaEE应用而言,推荐使用ApplictionContext,它是BeanFactory的子接口

我们常用的容器有三种:
ClassPathXmlApplicationContext: 它是从类的根路径下加载配置文件
FileSystemXmlApplicationContext: 它是从磁盘路径上加载配置文件(必须要有访问权限)
AnnotationConfigApplicationContext: 读取注解创建容器
在这里插入图片描述
Spring容器原理浅析
①利用dom4j技术,解析XML配置文件,获取里面所有的信息。
②根据class属性的值,利用反射创建对象。
③将利用反射创建出的对象放入到map中,key就是它所对应的id值。

BeanFactory和ApplicationContext 的区别

BeanFactory 接口

是一个用来访问 Spring 容器的 root 接口,要访问 Spring 容器,我们将使用 Spring 依赖注入功能,使用BeanFactory 接口和它的子接口

BeanFactory在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。

ApplicationContext 接口

ApplicationContext 是 Spring 应用程序中的中央接口,用于向应用程序提供配置信息 它继承了BeanFactory 接口,所以 ApplicationContext 包含 BeanFactory 的所有功能以及更多功能!它的主要功能是支持大型的业务应用的创建

ApplicationContext在构建核心容器时,创建对象采取的是立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。 控制反转(IoC)

1、为什么要使用控制反转

调用者不用去关心被调用者的实现,不需要调用者亲自创建被调用者的实例,这些操作都交给框架去完成。

这种设计思想就是控制反转(Inversion of Control, IoC),同时,它还有另外一个名字就是依赖注入(Dependency Injection, DI)

IoC的作用,降低程序间的耦合

2、什么是控制反转

控制反转(IoC)是将由程序控制的“对象间的依赖关系”转交给IoC容器来进行控制,被调用者的实例创建工作不再由调用者来完成。 通过控制反转,可以实现由外部容器控制应用中各个类之间的关系。 借助于控制反转,被调用者是被“注入”而不是被硬编码到调用者的代码中,这可以大大降低调用者和被调用者之间的依赖关系。

3、图解控制反转
传统程序设计都是主动去创建相关对象然后再组合起来
在这里插入图片描述
当有了IOC/DI的容器后,在客户端类中不再主动去创建这些对象了
在这里插入图片描述

基于XML的IoC

1、下载spring资源包,并把相关驱动包导入到当前工程环境中。
在这里插入图片描述
2、添加和配置spring的配置文件
applicationContext.xml

配置bean :在src目录下创建applicationContext.xml文件,把对象的创建交给spring来管理.
每个标签对应一个类,其class属性为该类的全类名,id属性为该类的id,在spring配置中,通过id获取类的对象.

3、创建并运行程序。

HelloWord.java

package com.jp; public class HelloWorld { public void say() { System.out.println("HelloWorld"); } }

HelloWordDemo
通过容器创建对象.通过核心容器的getBean()方法获取具体对象.

package com.jp; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class HelloWorldDemo { @Test public void test1(){ HelloWorld one = new HelloWorld(); one.say(); } @Test public void test2(){ //启动Spring容器,读取src下applicationContext.xml文件中的信息 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //利用spring容器获取对象 HelloWorld one= (HelloWorld) ac.getBean("one"); one.say(); } }
作者:默&



spring ioc

需要 登录 后方可回复, 如果你还没有账号请 注册新账号