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
。
网友评论