spring中的100个问题-(spring-beans)bean是如何创建的?

分类: JVM 发布于:

Bean container解决的核心问题是如何在运行时(run-time)动态获取或创建Java Object。

Bean Container的类图

spring提供了3中方式创建beans

函数调用堆栈

AutowireCapableBeanFactory 接口

Spring-beans模块中使用AutowireCapableBeanFactory接口实现bean的创建和销毁。

<T> T createBean(Class<T> beanClass) throws BeansException;

void autowireBean(Object existingBean) throws BeansException;

Object configureBean(Object existingBean, String beanName) throws BeansException;

Object createBean(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;

Object autowire(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;
void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck)
			throws BeansException;

void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException;

Object initializeBean(Object existingBean, String beanName) throws BeansException;

Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)
			throws BeansException;

Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
			throws BeansException;

void destroyBean(Object existingBean);

<T> NamedBeanHolder<T> resolveNamedBean(Class<T> requiredType) throws BeansException;

Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName) throws BeansException;

Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName,
			Set<String> autowiredBeanNames, TypeConverter typeConverter) throws BeansException;

BeanFactory 接口

访问spring container的根接口(根界面)

接口列表

<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);