spring中的主要类-简释

  • spring中以er结尾的接口提供的都是getXXX()方法,或者是set方法,或publish方法
  • spring中以Capable(再生/有…的能力)结尾的接口提供的也是getXXX()方法,有XXX的能力
  • spring中doXXX()方法都是实际干事情的方法

AnnotationConfigApplicationContext继承图在这里插入图片描述
顶 级 接 口 \color{red}{顶级接口}

  1. BeanFactory有getBean() 可获得bean

  2. HierarchicalBeanFactory有getParentBeanFactory() ,具有层次结构的bean工厂接口,可获得父(上一级的 )BeanFactory,也可在configurablebanfactory接口中以配置的方式设置父级beanFactory

  3. ListableBeanFactory:有getBeanDefinitionCount() 可统计被定义的bean

  4. ApplicationEventPublisher有publishEvent() 通知所有注册的被匹配到的监听者lisener,关于这个spring应用的事件。 可发布spring应用事件

  5. EnvironmentCapable环境再生/胜任有 getEnvironment(); 可获得Environment对象

  6. MessageSource是用来获得消息的,通过getMessage()方法

  7. ResourceLoader它可以可获得类加载器或资源类(即输入流/Resource有getFile()获取文件的方法)

ProtocolResolver 可对协议进行解析或解析自定义的协议

  1. ResourcePatternResolver它是ResourceLoader的扩展,可对蚂蚁式的资源路径匹配模式进行解析【Ant-style蚂蚁式路径匹配就是规定了常用的3种路径匹配规则 ,?,* 匹配任何单字符/匹配0或者任意数量的字符/匹配0或者更多的目录】 可用于任何类型的位置模式(例如“/WEB-INF/-context.xml”),建议一个新的资源加上前缀“class path:”,还可以根据路径得到Resource[]数组。即对应多个配置文件,这就是把外存的配置文件加载读入解析到内存中

Enviroment根据文件路径,或者包路径,得到配置文件或配置类的信息,并且可以解析文件中的属性

  1. java.lang.AutoCloseable一个对象,它可以保存资源(如文件或套接字句柄)直到它被关闭。自动退出对象的关闭()方法在退出具有资源块的尝试时被自动调用,资源块已经在资源规范标题中声明了该对象。这种结构确保了及时发布,避免了资源耗尽异常和可能发生的错误。基类实现autocloseable是可能的,而且事实上是常见的,即使不是所有的子类或实例都包含可发布的资源。对于必须在完全通用性下运行的代码,或者当知道自动关闭实例需要释放资源时,建议对资源构造使用try。但是,当使用支持基于I/O和非基于I/O的表单的流等工具时,使用非基于I/O的表单时通常不需要try with resources块。
  2. DefaultResourceLoader 它是resourceloader接口的默认实现。由资源编辑器使用,并用作AbstractApplicationContext的基类。也可以单独使用。
    如果location值是URL,则返回UrlResource;如果是非URL路径或“classpath:”伪URL,则返回ClassPathResource。
  3. AliasRegistry注册bean的别名,删除别名,获取别名。【registerAlias,getAliases…】encapsulates

二 级 接 口 \color{red}{二级接口}

  • Lifecycle生命周期的控制处理是异步的,容器将开始/停止信号传播到每个容器中应用的所有组件中,例如在运行时停止/重启的信号。【里面提供了开始,停止,正在运行的的方法】
  • ApplicationContext由于继承了1,2,3,4,5,6,7,8.,所以它获得了getBean,getMessage,getEnvironment(),pulishEvent()等功能,同时它自身还扩展了getAutowireCapableBeanFactory()方法,你可以通过该方法拿到这个有着自动注入能力的beanFactory类
  • ConfigurableApplicationContext可配置的ApplicationContext,可向应用环境中添加自定义的应用监听器,后置处理器,设置ApplicationContext的父级,设置环境(切换应用的配置文件)【addApplicationListener,addBeanFactoryPostProcessor,refresh,setEnvironment】
  • BeanDefinitionRegistry他继承自AliasRegistry,除了可对bean别名进行crud,还可以对BeanDefinition进行crud
  • AbstractApplicationContext它里面有List < BeanFactoryPostProcessor > beanFactoryPostProcessors即容纳bean工厂的后置处理器的列表容器,该类可以自动注册在上下文中被定义为bean的beanfactorypostprocessors、beanpstprocessors和applicationlisteners。它使用了模板方法设计模式,需要具体的子类来实现抽象方法。
  • GenericApplicationContext实现了一个单一的内部定义工厂实例(new beanFactory),而不承担一个特定的bean格式定义。
    • 实现BeanDefinitionRegistry接口,以便允许对其使用任何bean定义读取器

    • 它典型的用法是:通过BeanDefinitionRegistry接口来注册一系列的beanDefinitions,(即添加bean)然后调用AbstractApplicationContext.refresh()去初始化那些bean,该方法只能调用一次

    • 它与其他 ApplicationContext的实现类不同的是:他的每次刷新refresh()调用,都会new一个内部BeanFactory实例,这个实例你可以从一开始就得到,以便注册到beanDefinations里面

    • xml使用例子如下

GenericApplicationContext ctx = new GenericApplicationContext();
 XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
 xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
 PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(ctx);
 propReader.loadBeanDefinitions(new ClassPathResource("otherBeans.properties"));
 ctx.refresh();

 MyBean myBean = (MyBean) ctx.getBean("myBean");
 //.........

构造方法如下:

public GenericApplicationContext() {
      //new了一个beanfactory的实例
		this.beanFactory = new DefaultListableBeanFactory();
	}

最 终 实 现 类 A n n o t a t i o n C o n f i g A p p l i c a t i o n C o n t e x t \color{red}{最终实现类AnnotationConfigApplicationContext} AnnotationConfigApplicationContext
AnnotationConfigApplicationContext

  • 作为独立的应用环境,它接受注解类作为输入,尤其是@Configuration和@Component注解
  • 如果有多个@Configuration注解类,后定义地@bean方法将会覆盖之前的类方法
  • 我们可以利用这点,慎重地通过一个额外的类来重写确定地bean定义
    在这里插入图片描述
    AutowireCapableBeanFactory它可以创建bean,自动注入bean,初始化bean,配置bean,解决bean依赖,bean名称,申请后置处理器对bean进行初始化前处理,初始化处理,销毁bean【createBean,autowireBean,configureBean,createBean,initializeBean,applyBeanPostProcessorsBeforeInitialization,applyBeanPostProcessorsAfterInitialization,destroyBean,resolveNamedBean,resolveDependency】-----------这是一个重点类

在这里插入图片描述
BeanDefinition可以【setBeanClassName,getBeanClassName,setScope,setLazyInit,setDependsOn,setPrimary,setFactoryBeanName,getPropertyValues,isSingleton,setParentName】,他继承了AttributeAccessor(属性访问器), BeanMetadataElement(bean元数据元素,里面的getSource()是拿到bean上注解的信息)
AbstractBeanDefinition提供了对bean定义的属性值的一系列getXXX,setXXX,isXXX方法,并做出了实现

在这里插入图片描述

  • StandardEnviroment这是可以直接new一下的,可以配置属性解析和与配置文件相关的操作)
  • AbstractEnvironment这是spring应用一启动时,里面的成员变量【Set activeProfiles激活的配置文件,Set defaultProfiles默认的配置文件,MutablePropertySources可变的属性资源(它是一个装PropertySource的迭代器),ConfigurablePropertyResolver可【可配置的属性解析器】就会被实例化
    • MutablePropertySources—>PropertySources---->Iterable<PropertySource<?>>
    • PropertySource是什么:
    public abstract class PropertySource<T> {
    
    protected final Log logger = LogFactory.getLog(getClass());
    
    protected final String name;
    
    protected final T source;
    }
    

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值