spring_load_bean
主要的类
BeanDefination
描述spring Bean的配置信息,主要的配置方式:xml,java注解,JavaConfig;
SpringBean的配置信息经过解析转换为BeanDefinition.不同的配置方式有不同的实现类
BeanDefinationRegistry
BeanDefinition的容器。保存配置信息(不是单例).Spring提供了扩展机制,允许用户在Spring框架启动时,动态地往BeanDefinitionRegistry容器中注册BeanDefinition对象。
BeanFactory
BeanFactory是Spring的Bean工厂,负责Bean的创建及属性注入。它同时是一个Bean容器,Spring框架启动后,会根据BeanDefinition对象创建Bean实例,所有的单例Bean都会注册到BeanFactory容器中.
BeanFactoryPostProcessor
BeanFactory的扩展接口..可以修改Bean的配置信息如BeanDefinition,BeanDefinitionRegistry..
xml和spring自己使用
@FunctionalInterface
public interface BeanFactoryPostProcessor {
// 修改BeanFactory的信息
void postProcessBeanFactor(ConfigurableListableBeanFactory var1) throws BeansException;
}
ImportBeanDefinitionRegistory
解析@Configuration注解时,通过ImportBeanDefinitionRegistrar接口的实现类向BeanDefinitionRegistry添加BeanDefinition信息.
public interface ImportBeanDefinitionRegistrar {
// 解析@Configuration时调用
// AnnotationMetadata是@import注解配置的信息
void registerBeanDefinitions(AnnotationMetadata var1, BeanDefinitionRegistry var2);
}
BeanPostProcessor
Bean初始化方法(init_method)调用前后执行的方法..
public interface BeanPostProcessor {
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
ClassPathBeanDefinitionScanner
ClassPathBeanDefinitionScanner是BeanDefinition扫描器,能够对指定包下的Class进行扫描,将Class信息转换为BeanDefinition对象注册到BeanDefinitionRegistry容器中。 ClassPathBeanDefinitionScanner支持自定义的过滤规则(扫描bean的基本规则....)
FactoryBean
FctoryBean是Spring中的工厂Bean,通常用于处理Spring中配置较为复杂或者由动态代理生成的Bean实例。实现了该接口的Bean不能作为普通的Bean使用,而是作为单个对象的工厂。当我们通过Bean名称获取FactoryBean实例时,获取到的并不是FactoryBean对象本身,而是FactoryBean对象的getObject()方法返回的实例。
spring_bean 启动过程
-
对所有Bean的配置信息进行解析,其中包括XML配置文件、Java注解以及Java Config方式配置的Bean。将Bean的配置信息转换为BeanDefinition对象,注册到BeanDefinitionRegistry容器中。
-
从BeanDefinitionRegistry容器中获取实现了BeanFactoryPostProcessor接口的Bean定义,然后实例化Bean,调用所有BeanFactoryPostProcessor对象的postProcessBeanFactory()方法,在postProcessBeanFactory()方法中可以对Bean工厂的信息进行修改。
-
根据BeanDefinitionRegistry容器中的BeanDefinition对象实例化所有的单例Bean,并对Bean的属性进行填充。
-
执行所有实现了BeanPostProcessor接口的Bean的postProcessBeforeInitialization()方法。该方法中可以对原始的Bean进行包装。
-
执行Bean的初始化方法,初始化方法包括配置Bean时通过init-method属性指定的方法,或者通过实现InitializingBean接口重写的afterPropertiesSet()方法
-
执行所有实现了BeanPostProcessor接口的Bean的postProcessAfterInitialization()方法。
Mybatis-spring加载bean的过程
mybatis-spring把Mapper接口的代理对象注入到Spring容器.
mybatis与spring的Bean结合的过程
mybtais与Spring事务结合的过程