[转]spring的BeanFactory和ApplicationContext接口(一)
public interface AutowireCapableBeanFactory extends BeanFactory { int AUTOWIRE_NO = 0; int AUTOWIRE_BY_NAME = 1; int AUTOWIRE_BY_TYPE = 2; int AUTOWIRE_CONSTRUCTOR = 3; int AUTOWIRE_AUTODETECT = 4; <T> T createBean(Class<T> beanClass) throws BeansException; Object createBean(Class beanClass, int autowireMode, boolean dependencyCheck) throws BeansException; Object configureBean(Object existingBean, String beanName) throws BeansException; Object initializeBean(Object existingBean, String beanName) throws BeansException; Object autowire(Class beanClass, int autowireMode, boolean dependencyCheck) throws BeansException; void autowireBean(Object existingBean) throws BeansException; void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck) throws BeansException; void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException; Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) throws BeansException; Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException; Object resolveDependency(DependencyDescriptor descriptor, String beanName) throws BeansException; Object resolveDependency(DependencyDescriptor descriptor, String beanName, Set<String> autowiredBeanNames, TypeConverter typeConverter) throws BeansException; }?
这个接口的主要实现代码都在AbstractAutowireCapableBeanFactory类中,暂时也没有发现其他地方用到这个接口,查看这些方法的实现可以去看这个类。
首先是5个常量代表自动装配的类型:不自动装配、按name、按类型、根据自省完全自动装配(不推荐,已在3.0中过时)。 两个创建Bean的方法,一个是根据类型,另外一个多了两个参数自动装配类型和是否检查依赖 configureBean()是一个用来主动的配置装配的,就是在需要的时候把existingBean自动装配给beanName对应的bean initializeBean()是bean的初始化方法在这里主要调用了几个工厂级回调(BeanNameAware、BeanClassLoaderAware和BeanFactoryAware),并处理了所有BeanPostProcessor的两个调用 autowire()方法创建一个类型为beanClass的bean对象,并根据自动装配类型autowireMode进行自动装配,dependencyCheck则代表是否做依赖检查 autowireBean()方法暂时没有很清楚,只知道和普通的按name按类型装配不同,和注解相关,以后分析清楚了再补充。 autowireBeanProperties方法()和上面的方法类似,只不过省略了bean创建的步骤,直接穿入一个bean对象进行自动装配 applyBeanPropertyValues()应用bean定义中明确定义的属性值,区别于autowireBeanProperties(会装配所有属性)。 applyBeanPostProcessorsBeforeInitialization()和applyBeanPostProcessorsAfterInitialization()两个方法处理BeanPostProcessor的两种回调,上面的initializeBean()方法的实现中就是调用这两个 两个resolveDependency()方法也没有搞清楚,是跟bean的依赖相关的,以后清楚了再补充。2.3.2、这个接口的继承结构也很清晰,一个子接口ConfigurableListableBeanFactory,一个实现类AbstractAutowireCapableBeanFactory。
转自http://www.sandzhang.com/