spring DefaultListableBeanFactory 實現了基本的IOC容器java
一 查看spring BeanFactory接口源碼。spring
1 String FACTORY_BEAN_PREFIX = "&"; //定義工廠bean的名字前綴爲「&」;緩存
2 Object getBean(String name) throws BeansException;//經過名稱獲取bean,名稱能夠是別名,也能夠是規範名;返回單例或者原型,若是爲單例,其餘持有者可能修改單例的屬性,若是沒有這個名稱拋出異常;猜測:實現類須要有存儲別名的地方。安全
3 <T> T getBean(String name, Class<T> requiredType) throws BeansException;app
4 <T> T getBean(Class<T> requiredType) throws BeansException;//若是有多個bean,或者沒有bean拋出異常。
編輯器
5 Object getBean(String name, Object... args) throws BeansException;//若是bean不是原型拋出異常
函數
5 <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
ui
6 boolean containsBean(String name);//是否包含bean的名稱
spa
7 boolean isSingleton(String name) throws NoSuchBeanDefinitionException;//是不是單例
接口
8 boolean isPrototype(String name) throws NoSuchBeanDefinitionException;//是不是原型
9 boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;//類型是否匹配
10 Class<?> getType(String name) throws NoSuchBeanDefinitionException;//獲取bean的類型
11 String[] getAliases(String name);//獲取名稱的別名
二 BeanFactory的子接口
1 HierarchicalBeanFactory //層次級的BeanFactory
1) BeanFactory getParentBeanFactory();//獲取父工廠;猜測:實現類存儲有父工廠
2)boolean containsLocalBean(String name);//當前的bean工廠是否具備這個bean名稱
2 AutowireCapableBeanFactory;//可自動裝配的beanFactory
1)定義了幾個裝配類型:不裝配,按名稱,按類型,按構造函數,自動(已過期)
2) <T> T createBean(Class<T> beanClass) throws BeansException;//建立bean,包括bean的後處理器處理
3) void autowireBean(Object existingBean) throws BeansException;//裝配一個已存在的bean
4)Object configureBean(Object existingBean, String beanName) throws BeansException;
5) Object resolveDependency(DependencyDescriptor descriptor, String beanName) throws BeansException;//解析bean的依賴描述
6)Object createBean(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;//建立bean
7) Object autowire(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;
8) void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck) throws BeansException;//自動裝配bean的屬性
9)void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException;//應用bean的屬性值
10)Object initializeBean(Object existingBean, String beanName) throws BeansException;//初始化bean
11) Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) throws BeansException;
12) Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException;
13) void destroyBean(Object existingBean);
14) Object resolveDependency(DependencyDescriptor descriptor, String beanName, Set<String> autowiredBeanNames, TypeConverter typeConverter) throws BeansException;
3 ListableBeanFactory;//可列表的beanFactory
1)boolean containsBeanDefinition(String beanName);
2)int getBeanDefinitionCount();
3)String[] getBeanDefinitionNames();
4)String[] getBeanNamesForType(Class<?> type);
5)String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);
6) <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;
7) <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
throws BeansException;
8)String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);
9) <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException;
10)Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;
11)<A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) throws NoSuchBeanDefinitionException;
4. ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry ;猜測: 單例bean註冊,存儲了單例,可是原型的每次都獲取
主要是配置beanFactory
設置父工廠,設置類加載器,設置臨時類加載器,設置是否緩存元數據,設置bean的表達式解析器,設置轉換服務,增長屬性編輯註冊器,增長用戶的屬性編輯器,複製屬性編輯註冊器中的屬性編輯器,設置類型轉換器
設置字符串表達式解析器,增長bean的後處理器,查看後處理器的數量,註冊bean的做用域,獲取註冊的bean的做用域的數量,按照做用域名稱獲取java類,獲取java的安全控制器,從其餘工廠複製配置,註冊別名,按照給定的String解析器
解析別名,獲取合併的bean定義,判斷是否爲工廠bean,設置一個bean是否在建立狀態,判斷一個bean是否在建立狀態,註冊依賴bean,獲取bean的依賴,獲取依賴與bean的beans,銷燬bean,銷燬單例bean,銷燬特殊做用域的bean