Spring学习(三)-Spring IoC容器

IoC的概念

IoC的字面意思就是控制反转,它包括两个“控制”和“反转”。
通俗来说,“控制”就是选择一件东西的控制权,“反转”就是把这种控制权从自己手中移除,交由第三方处理。对于软件来说,即是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。同时可以用依赖注入(DI)来代替IoC,即调用类对某一个接口实现类的依赖关系由第三方注入,以移除调用类的某一接口实现类的依赖。
IoC的类型
从注入方法上看,主要可以划分为三种类型:构造函数注入属性注入接口注入。Spring支持构造函数注入和属性注入。

Spring BeanFactory容器

BeanFactory是一个类工厂,但和传统的类工厂不同,传统的类工厂仅负责构造一个或几个类的实例,而BeanFactory是类的通用厂,它可以创建并管理各种类的对象。这些可被创建和管理的对象本身没有什么特别之处,仅仅是一个POJO,Spring称这些被创建和管理的Java对象为Bean。Spring为BeanFactory提供了多种实现,最常用的是XmlBeanFactory。BeanFactory接口位于类结构的树顶端,它的最主要方法就是getBean(String beanName),该方法从容器中返回特定名称的Bean。
例子:

使用Spring配置文件为Car提供配置信息,然后通过BeanFactory装载配置文件,启动SpringIoC容器。

XmlBeanFactory通过Resource装载了Spring配置文件并启动了IoC容器,然后就可以通过getBean()的方法获得IoC容器里面的Bean了。通过BeanFactory启动了IoC容器时,并不会初始化配置文件中定义的Bean,直到第一次调用才回进行初始化。对于单实例的Bean来说,BeanFactory会缓存Bean实例,所以第二次使用getBean()获得Bean是会直接再IoC容器的缓存中获得Bean实例。
值得一提,在初始化BeanFactory时,必须为其提供一种日志框架,我们使用log4j.properties,即在类路径下提供此配置文件,Spring容器才不会报错。

运行结果:
在这里插入图片描述

Spring ApplicationContext容器

如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯。ApplicationContext是BeanFactory的子接口,也被成为Spring上下文,它提供了更多面向实际应用的功能。ApplicationContext的主要实现类是ClassPathXmlApplicationContextFileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。
在获取ApplicationContext实例后,就可以像BeanFactory一样调用getBean(String beanName)返回Bean了。ApplicationContext与BeanFactory的初始化有一个区别:BeanFactory在初始化时并未实例化Bean,直到第一次访问某个Bean时才实例化目标Bean,而ApplicationContext在初始化上下文时就实例化全部单实例的Bean。
例子:

和基于XML文件配置方式的优势在于,类注解的方式可以让开发者很容易控制Bean的初始化过程,比起XML的配置更加灵活。
通过带有@Configuration的配置类启动容器
AnnotationConfigApplicationContext将加载Beans.class中的Bean定义并调用Beans.class中方法实例化的Bean,启动容器并装配Bean。
运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值