IOC容器接口: BeanFactory
package org.springframework.beans.factory;
import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
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;
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
其中定义了一些getBean方法,通过这个方法我们可以从容器中获取Bean。以及对Bean的一些判断方法。
BeanDefinition:记录Bean信息的载体解析后用于保存Bean信息的数据结构。
Resource:指记录BeanDefinition信息的载体本身。(文件,流等)
BeanDefinitionReader:将读取到的Resource解析成BeanDefinition的工具。
编程式使用IOC容器:
ClassPathResource resource = new ClassPathResource("beans.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);//通过回调的方式把Bean信息写入BeanFactory中
ApplicationContext
ApplicationContext是IOC容器(BeanFactory)的一种扩展形式。
除了实现IOC容器的接口之外,还实现了:
1.支持不同的信息源(国际化)---------(messageSource接口)
2.访问资源--------------内置了Reader,不用我们再手动创建Reader
3.支持应用事件,继承了接口ApplicationEventPublisher,从而引入了事件机制。多与Bean的生命周期联合使用。