4.ioc容器的两个应用场景

来源:互联网 发布:硅谷办公室装修 知乎 编辑:程序博客网 时间:2024/05/17 18:26
BeanFacotry的应用场景
BeanFactory接口定义了ioc容器的最基本的形式,并且提供了ioc容器所应该遵守的基本的服务契约,同时,这也是我们使用ioc容器所应该遵


守的最顶层和最基本的编程规范,这些接口定义勾画了ioc的基本轮廓,很显然,在Spring的代码实现中,BeanFactory只是一个接口类,并没有


给出容器的具体实现,所以从源码中我们可以看到,如DefaultListableBeanFactory,XmlBeanFactory,ApplicationCOntext等等都可以看成是


容器附加了某种功能的具体实现,就是容器接口体系中的具体容器产品,下面我们来看看BeanFactory是如何定义ioc容器的基本接口的
用户使用容器时候,可以使用转移字符"&"来得到FactoryBean本身,用来区分通过容器来获取FactoryBeanC产生的对象和获取


FactoryBea,n本身(如myJndiObject是一个FactoryBean,那么使用&myJndiObject得到的是FactoryBean,而不是myJndiObject这个FactoryBean


产生出来的对象)
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}




ApplicationContext应用场景
ApplicationContext是一个高级形态的ioc容器,扩展了以下功能
1.支持不同的信息源2.访问资源.3支持应用事件.4.提供附加服务
实现该接口的类有很多,如FileSystemlXmlApplicationContext
截取一段FileSytemXmlApplicationContext的源码下来分析,在FileSytemXmlApplicationContext的设计中,我们可以看到


ApplicationContext应用上下文的主要功能已经在FileSystemXmlApplicationContext的基类AbstractXmlApplicationContext中实现了,在


FileSystemXmlApplicationContext中,作为一个具体的应用上下文,只需要实现和它自身设计相关的两个功能,
一个功能是如果直接应用FileSytemXmlApplicationContext,对于实例化这个应用上下文的支持,同时启动ioc容器的refresh()过程,


秒看代码:
*/
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
throws BeansException {


super(parent);
setConfigLocations(configLocations);
if (refresh) {
refresh();
}
}
另一个功能就是读取配置文件相关
protected Resource getResourceByPath(String path) {
if (path != null && path.startsWith("/")) {
path = path.substring(1);
}
return new FileSystemResource(path);
}
0 0
原创粉丝点击