美文网首页
Spring Ioc DI

Spring Ioc DI

作者: 帮我的鸵鸟盖个章 | 来源:发表于2020-11-30 22:41 被阅读0次

    Spring Ioc 容器是Spring框架的核心。只需要进行简单的容器配置,就能将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生命周期。Spring容器使用依赖注入DI来管理组成应用程序的组件。

    Ioc主要涉及五大模块。

    Resource

    主要负责资源管理,包括ClassPathResourceURLResourceFileSystemResource等。
    ResourceLoader进行资源的加载。

    BeanFactory

    进行加载解析,这是一个bean容器,其中BeanDefinition是它的基本结构,其内部维护着一个BeanDefinitionMap,并可以根据BeanDefinition的描述,进行bean的创建和管理。

    BeanDefinition

    用来描述Spring中的Bean对象。

    BeanDefinitionReader

    的是读取Spring配置文件中的内容,将其转换为IOC内部的数据结构:BeanDefinition

    BeanFactory

    BeanFactroy是一个高级工厂的接口,该工厂能够维护不同bean及其以来的对象。

    BeanFactory使我们能够读取bean定义并使用bean工厂访问他们。

    BeanFactory基本上都是使用getBean(String)方法在容器中检测并获取实例。

    BeanFactory的方法
    1. boolean containsBean(String):如果BeanFactory包含于给定名称匹配的bean,则返回true
    2. Object getBean(String) :返回指定名称的bean
    3. Object getBean(String,Class) :返回指定名称的bean,这个bean强制 转换为制定了的Class
    4. Class getType(String name):返回具有指定名称的BeanClass
    5. boolean isSingleton(String):返回指定名称的bean是否为单例
    6. String[] getAliases(String):返回指定bean的别名

    ApplicationContext

    是一个Spring容器,也叫应用上下文。它继承BeanFactory,同时也是BeanFactory的拓展升级版。其主要区别有:

    1. 继承MessageSource,提供国际化的标准访问策略;

    2. 继承 ApplicationEventPublisher,提供强大的事件机制;

    3. 扩展 ResourceLoader,可以用来加载多个 Resource,可以灵活访问不同的资源;

    4. Web应用的支持。

    Spring提供一下两种类型的容器:

    1. BeanFactory容器
    2. ApplicationContext容器

    Spring的依赖注入
    setter 注入

    通过调用无参数构造函数或无参数静态工厂方法以实例化bean之后,在bean上调用setter方法,可以实现基于setterDI

    public class TestSetterDI {
    
    DemoBean demoBean = null;
    
    public void setDemoBean(DemoBean demoBean) {
        this.demoBean = demoBean;
      }
    }
    复制代码
    

    构造方法注入

    基于构造函数的DI是通过调用具有多个参数(每个参数代表一个对象实例)的构造函数来实现的。另外,调用带有特定参数的静态工厂方法来构造Bean几乎是等效的,本文的其余部分将类似地考虑构造函数的参数和静态工厂方法的参数。

    public class ConstructorDI {
    
    DemoBean demoBean = null;
    
    public TestSetterDI (DemoBean demoBean) {
        this.demoBean = demoBean;
      }
    }
    复制代码
    

    注解注入

    注解注入只需要在需要在成员变量上添加@Autowire注解即可

    public class ConstructorDI {
    
    @Autowire
    private DemoBean demoBean;
      }
    }
    复制代码
    

    ApplicationContext的常见的实现有哪些 ?

    ApplicationContext的三种常用实现是:

    1. ClassPathXmlApplicationContext:它从位于类路径中的

      XML文件中加载上下文定义,并将上下文定义视为类路径资源。使用代码从应用程序的类路径中加载应用程序上下文。

      ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
      
    2. FileSystemXmlApplicationContext:它从文件系统中的XML文件加载上下文定义。使用代码从文件系统中加载应用程序上下文。

    ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
    
    1. XmlWebApplicationContext:它从Web应用程序中包含的XML文件中加载上下文定义。

    BeanFactory或ApplicationContext最好使用哪个 ?

    BeanFactory基本上只是实例化和配置BeanApplicationContext也可以做到这一点,它提供了支持基础设施来支持许多企业特有的特性,例如事务和AOP

    因此,建议使用ApplicationContext

    相关文章

      网友评论

          本文标题:Spring Ioc DI

          本文链接:https://www.haomeiwen.com/subject/ditjwktx.html