spring ioc源码分析
ioc定义
控制反转,将原先需要我们创建的对象交给统一的容器创建。
核心容器
- BeanFactory:
String FACTORY_BEAN_PREFIX = "&"; Object getBean(String name) throws BeansException; <T> T getBean(String name, @Nullable 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; 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, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinitionException; Class<?> getType(String name) throws NoSuchBeanDefinitionException; String[] getAliases(String name);
如上,BeanFactory只对Ioc容器基本行为做了定义,不关心bean是如何定义和加载的,正如我们只关心工厂能得到什么产品对象,至于工厂如何生产对象无需我们去关心。如果需要查看Ioc的容器的实现只需查看BeanFactory的实现类,ApplicationContext是Spring提供的一个高级Ioc容器,它除了能够提供Ioc容器的基本功能,还为用户提供了很多附加服务。比如,信息源(MessageResource)可以支持国际化,访问资源(ResourcePatternResolver),应用事件(ApplicationEventPublisher)
-
BeanDefinition
此类主要用来描述Ioc容器中Bean的详细信息。
-
BeanDefinitionReader
此类主要用于读取我们配置的Bean信息,将我们配置的Bean转换为BeanDefinition
以Web Ioc容器为例
