• 01.Spring Ioc 容器


    基本概念

    Spring 的 Ioc 容器,通常也称应用上下文。它包含了两个概念 Ioc 和 容器:

    • 容器:顾名思义就是用来装东西的,在 Spring 中容器里盛放的就是各种各样的 Bean。既然装了东西,那么理所应当的要控制东西何时盛放(添加),何时倒掉(移除),这就是所谓的 Bean 管理。因此 Spring 容器的作用是负责 Bean 的创建和管理。

    • Ioc:Inversion of Control,即控制反转,意指控制权的转换。原来创建 Bean 需要开发者利用 new 关键字创建 Bean 实例,现在 Spring 容器替我们完成了这一工作,开发者只需负责调用 Bean 即可。


    Beanfactory

    了解了 Spring 的 Ioc 容器作用后,接下来就要知道容器具体的指什么?在 Spring 中容器用 Beanfactory 指代。下面来看它的接口定义:

    public interface BeanFactory {
    
        // 表示由 FactoryBean 创建的 Bean,与依赖注入有关
        String FACTORY_BEAN_PREFIX = "&";
    
        // 取得 Bean 
    
        Object getBean(String name) throws BeansException;
    
        <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;
    
        // 容器中是否包含指定的 Bean
        boolean containsBean(String name);
    
        // 判断 Bean 的属性(单例或原型,两者是对立关系)
    
        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;
    
        // 取得 Bean 类型
        Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    
        // 取得 Bean 的别名
        String[] getAliases(String name);
    
    }

    观察代码,可以发现接口中存放着各种 Bean,并提供了这些 Bean 的查询功能,所以才会将其抽象为容器。

    现实生活中可以被称之为容器的东西有很多,如碗,杯子,水桶,盒子等等,它们除了共有的相同点——盛放东西外,各自作用也大相庭径,比如碗用来盛饭,杯子用来装水,盒子用来收纳物件。在 Spring 中也一样, BeanFactory 是容器的抽象,它存在着各种各样的子类,实现类,它们除了装载、管理 Bean 外,同样有着各自不同的作用。下面来看它的继承关系:

    这里写图片描述

    观察上图,发现一个特别的接口——ApplicationContext,该接口是 BeanFactory 的子接口,同样的有许多接口继承了它。所以在 Spring 中它的重要性毋庸置疑。


    ApplicationContext

    经过上面的分析,我们了解了 Spring Ioc 容器的作用,知道了容器在 Spring 代指 BeanFactory 。同时提到了该接口,如果是 BeanFactory 代指水杯,那么 ApplicationContext 就是不锈钢保温杯。除了盛水的作用外,还具备防摔,防锈,保温的功能。可以将其是理解为 BeanFactory 的高级形态,也称应用上下文。应用上下文在在简单容器的基础上添加了许多面向框架的特性。

    首先来它的签名:

    public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
            MessageSource, ApplicationEventPublisher, ResourcePatternResolver 
    • ListableBeanFactory 是 Bean 相关的列表功能

    • HierarchicalBeanFactory 代表了支持层级功能

    • MessageSource 代表了支持 Spring的国际化信息

    • ApplicationEventPublisher 代表了支持 Spring的事件处理

    • ResourcePatternResolver 则资源相关的处理功能

    再来看看该接口的定义:

    String getId();  
    
    String getDisplayName();  
    
    long getStartupDate();  
    
    ApplicationContext getParent();  
    
    AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;  

    ApplicationContext 虽然是 BeanFactory 的子接口,但是可以认为它不是一个 BeanFactory,ApplicationContext 对象里面包含了一个 BeanFactory 对象。

    相关 Bean 基本功能是调用了其内部的一个BeanFactory 对象来实现的,而不是自己进行的实现。它对BeanFactory进行了一定的封装扩展,使其具备更多不同的功能。


    参考

  • 相关阅读:
    DAY 206 Python验证常见的50个正则表达式
    DAY 205 python使用ftplib模块实现FTP文件的上传下载
    Jmeter组件介绍
    Jmeter安装
    Jmeter学习笔记
    Jmeter:相应断言介绍
    python time模块
    python+selenium+Eclipse安装
    Python os.path模板函数
    ping 计算机全名,返回的不是IP地址
  • 原文地址:https://www.cnblogs.com/moxiaotao/p/9349497.html
Copyright © 2020-2023  润新知