Spring Ioc 容器是Spring框架的核心。只需要进行简单的容器配置,就能将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生命周期。Spring容器使用依赖注入DI来管理组成应用程序的组件。
Ioc主要涉及五大模块。
Resource
主要负责资源管理,包括ClassPathResource,URLResource,FileSystemResource等。
ResourceLoader进行资源的加载。
BeanFactory
进行加载解析,这是一个bean容器,其中BeanDefinition是它的基本结构,其内部维护着一个BeanDefinitionMap,并可以根据BeanDefinition的描述,进行bean的创建和管理。
BeanDefinition
用来描述Spring中的Bean对象。
BeanDefinitionReader
的是读取Spring配置文件中的内容,将其转换为IOC内部的数据结构:BeanDefinition。
BeanFactory
BeanFactroy是一个高级工厂的接口,该工厂能够维护不同bean及其以来的对象。
BeanFactory使我们能够读取bean定义并使用bean工厂访问他们。
BeanFactory基本上都是使用getBean(String)方法在容器中检测并获取实例。
BeanFactory的方法
-
boolean containsBean(String):如果BeanFactory包含于给定名称匹配的bean,则返回true -
Object getBean(String):返回指定名称的bean -
Object getBean(String,Class):返回指定名称的bean,这个bean强制 转换为制定了的Class -
Class getType(String name):返回具有指定名称的Bean的Class -
boolean isSingleton(String):返回指定名称的bean是否为单例 -
String[] getAliases(String):返回指定bean的别名
ApplicationContext
是一个Spring容器,也叫应用上下文。它继承BeanFactory,同时也是BeanFactory的拓展升级版。其主要区别有:
-
继承
MessageSource,提供国际化的标准访问策略; -
继承
ApplicationEventPublisher,提供强大的事件机制; -
扩展
ResourceLoader,可以用来加载多个 Resource,可以灵活访问不同的资源; -
对
Web应用的支持。
Spring提供一下两种类型的容器:
-
BeanFactory容器 -
ApplicationContext容器
Spring的依赖注入
setter 注入
通过调用无参数构造函数或无参数静态工厂方法以实例化bean之后,在bean上调用setter方法,可以实现基于setter的DI。
public class TestSetterDI {
DemoBean demoBean = null;
public void setDemoBean(DemoBean demoBean) {
this.demoBean = demoBean;
}
}
复制代码
构造方法注入
基于构造函数的DI是通过调用具有多个参数(每个参数代表一个对象实例)的构造函数来实现的。另外,调用带有特定参数的静态工厂方法来构造Bean几乎是等效的,本文的其余部分将类似地考虑构造函数的参数和静态工厂方法的参数。
public class ConstructorDI {
DemoBean demoBean = null;
public TestSetterDI (DemoBean demoBean) {
this.demoBean = demoBean;
}
}
复制代码
注解注入
注解注入只需要在需要在成员变量上添加@Autowire注解即可
public class ConstructorDI {
@Autowire
private DemoBean demoBean;
}
}
复制代码
ApplicationContext的常见的实现有哪些 ?
ApplicationContext的三种常用实现是:
-
ClassPathXmlApplicationContext:它从位于类路径中的XML文件中加载上下文定义,并将上下文定义视为类路径资源。使用代码从应用程序的类路径中加载应用程序上下文。ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); -
FileSystemXmlApplicationContext:它从文件系统中的XML文件加载上下文定义。使用代码从文件系统中加载应用程序上下文。
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
-
XmlWebApplicationContext:它从Web应用程序中包含的XML文件中加载上下文定义。
BeanFactory或ApplicationContext最好使用哪个 ?
BeanFactory基本上只是实例化和配置Bean。ApplicationContext也可以做到这一点,它提供了支持基础设施来支持许多企业特有的特性,例如事务和AOP。
因此,建议使用ApplicationContext。









网友评论