spring bean加载对象简介

来源:互联网 发布:家庭用网络交换机 编辑:程序博客网 时间:2024/05/17 08:50

BeanFactory


InstantiationStrategy

BeanDefinition加入到注册中,并由BeanFactoryPostProcessor的实现类处理后,需要由InstantiationStrategy负责实例化。

BeanDefinitionRegistry   

该类的作用主要是向注册表中注册 BeanDefinition 实例,完成 注册的过程。

public interface BeanDefinitionRegistry extends AliasRegistry {     // 关键 -> 往注册表中注册一个新的 BeanDefinition 实例     void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException;     // 移除注册表中已注册的 BeanDefinition 实例    void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;     // 从注册中取得指定的 BeanDefinition 实例    BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;     // 判断 BeanDefinition 实例是否在注册表中(是否注册)    boolean containsBeanDefinition(String beanName);     // 取得注册表中所有 BeanDefinition 实例的 beanName(标识)    String[] getBeanDefinitionNames();     // 返回注册表中 BeanDefinition 实例的数量    int getBeanDefinitionCount();     // beanName(标识)是否被占用    boolean isBeanNameInUse(String beanName);}


BeanFactoryPostProcessor

当spring初始化好BenaDefinnitionMap之后,提供了一个接口BeanFactoryPostProcessor,允许我们开发者自定义的去修改BeanFactory中的内容,这也是符合“spring”的开闭原则

public interface BeanFactoryPostProcessor {    /**     * 这里提供了修改beanFacotry的机会         */    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;}


PropertyEditorRegistry

Spring大部分默认属性编辑器都直接扩展于java.beans.PropertyEditorSupport类,用户也可以通过扩展PropertyEditorSupport实现自己的属性编辑器


PropertySource

属性源,key-value属性对抽象,比如用于配置数据


PropertyResolver

public interface PropertyResolver {        //是否包含某个属性      boolean containsProperty(String key);             //获取属性值 如果找不到返回null       String getProperty(String key);                 //获取属性值,如果找不到返回默认值            String getProperty(String key, String defaultValue);              //获取指定类型的属性值,找不到返回null      <T> T getProperty(String key, Class<T> targetType);            //获取指定类型的属性值,找不到返回默认值      <T> T getProperty(String key, Class<T> targetType, T defaultValue);             //获取属性值为某个Class类型,找不到返回null,如果类型不兼容将抛出ConversionException      <T> Class<T> getPropertyAsClass(String key, Class<T> targetType);            //获取属性值,找不到抛出异常IllegalStateException      String getRequiredProperty(String key) throws IllegalStateException;            //获取指定类型的属性值,找不到抛出异常IllegalStateException             <T> T getRequiredProperty(String key, Class<T> targetType) throws IllegalStateException;            //替换文本中的占位符(${key})到属性值,找不到不解析      String resolvePlaceholders(String text);            //替换文本中的占位符(${key})到属性值,找不到抛出异常IllegalArgumentException      String resolveRequiredPlaceholders(String text) throws IllegalArgumentException;    } 

BeanDefinition

这个接口描述bean的结构,对应XML中的< bean >或者配置类中的@Bean 它集成了BeanMetadataElement和AttributeAccessor

PropertyValues

包含了一个或者多个PropertyValue对象,通常用作特定的一个目的bean的属性更新

AttributeAccessor

接口定义了最基本的对任意对象的元数据的修改或者获取

BeanPostProcessor

BeanPostProcessor 主要对其他Bean进行处理,例如为其他Bean生成代理等。 
public interface BeanPostProcessor {       //实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化任务      Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;      //实例化、依赖注入、初始化完毕时执行      Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;   }  

BeanWrapper

BeanWrapper是对Bean的包装

SimpleAliasRegistry

SimpleAliasRegistry有一个属性aliasMap,是一个ConcurrentHashMap,用来存放bean的别名。在注册别名时使用的是方法:registerAlias

AnnotatedTypeMetadata

定义访问特定类型的注解

原创粉丝点击