spring原理机制

作者: 白首倾盖 | 来源:发表于2018-04-15 18:18 被阅读66次

    1,关于spring容器:

    Spring的核心是spring容器,该容器负责管理spring中的java组件。

    ApplicaTIonContext ctx = new ClassPathXmlApplicaTIonContext("xxx.xml");//实例化容器,容器会自动预初始化所有Bean实例。ApplicaTIonContext 实例正是Spring容器。

    ctx.getBean("beanName");//获取bean

    ApplicaTIonContext容器默认会实例化所有的singleton Bean

    Spring容器并不强制要求被管理组件是标准的javabean。

    2,Spring的核心机制:依赖注入。

      不管是依赖注入(Dependency Injection)还是控制反转(Inversion of Conctrol),其含义完全相同:

      当某个java实例(调用者)需要调用另一个java实例(被调用者)时,传统情况下,通过调用者来创建被调用者的实例,通常通过new来创建,

      而在依赖注入的模式下创建被调用者的工作不再由调用者来完成,因此称之为“控制反转”;创建被调用者实例的工作通常由Spring来完成,然后注入调用者,所以也称之为“依赖注入”。

    3,依赖注入的方式:

        依赖注入一般常用两种:

      setter注入:IoC容器使用属性的setter方式注入被依赖的实例。

            <property name="" ref ="">

      构造注入:IoC容器使用构造器来注入被依赖的实例。                   

            <constructor-arg index="0" ref = "">

                       

      配置构造注入的时候《constructor-arg》可以配置index属性,用于指定该构造参数值作为第几个构造参数值。下标从0开始。

    4,Spring容器和被管理的bean:

      Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可以代表Spring容器。

      Spring容器是生成Bean实例的工厂,并管理Spring中的bean,bean是Spring中的基本单位,在基于Spring的java EE工程,所有的组件都被当成bean处理。

    Spring容器类图

    Spring容器:Spring最基本的接口就是BeanFactory,BeanFactory有很多实现类,通常使用XmlBeanFactory,对于绝大多数的JAVA EE项目,使用ApplicationContext。

    ApplicationContext事件机制是基于观察者设计模式实现的。通过ApplicationEvent类和ApplicationListener接口,其中ApplicationEvent:容器事件,必须由ApplicationContext发布;ApplicationListener:监听器,可有容器内的任何监听器Bean担任。

    容器中bean的作用域:

    singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的bean将只有一个实例;

    prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新实例;

    request:对于每次HTTP请求中,使用request定义的bean都将产生一个新实例,只有在web应用程序使用Spring时,该作用域才有效;

    session:同理

    global session:同理

      注意:request和session作用域只在web应用中才生效,并且必须在web应用中增加额外的配置才会生效,为了让request,session两个作用域生效,必须将HTTP请求对象绑定到为该请求提供服务的线程上,这使得具有request和session作用域的Bean实例能够在后面的调用链中被访问。

    获取容器的引用:

    通常情况下:Bean无需访问Spring容器,而是通过Spring容器访问的,即使 需要手动访问Spring容器,程序也已通过类似下面的代码获取Spring容器 的引用。

      ApllicationContext cts = ClassPathApplalicationContext(“bean.xml”);

      但在一些极端的情况下,可能Bean需要访问Spring容器。Spring提供另一种方法访问Spring容器:实现BeanFactoryAware接口的Bean,拥有访问Spring容器的能力,实现BeanFactoryAware的Bean被容器实例化后,会拥有一个引用指向创建他的BeanFactory。BeanFactoryAware只有一个方法setBeanFactory(BeanFactory beanFactory)该参数指向创建他的BeanFactory。

    相关文章

      网友评论

        本文标题:spring原理机制

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