框架-Spring容器

1.   Spring Ioc容器

容器是Spring框架的基础,容器会创建、串联、配置对象,并且能管理对象的整个生命周期。如下是代表 Spring工作原理

 

MetaData 指定哪些对象实例化、配置、组装;metadata可以是xml文件、注释或者java代码;Spring Ioc容器利用POJO类集合、配置文件Metadata产生一个可配置、可执行的系统或应用。

Spring提供两大类容器:

(1)       BeanFactory Container

定义在org.springframework.beans.factory.BeanFactoryinterfac,提供DI技术的最简单容器;BeanFactory及其相关接口BeanFactoryAware, InitializingBean, DisposableBean 共同支持第三方框架与Spring的整合;

(2)       ApplicationContext Container

ApplicationContext 容器支持从properties file解析文本messages、给特定event listeners发布应用事件;容器定义org.springframework.context.ApplicationContext interface。

ApplicationContext 容器包含所有BeanFactory功能,所以一般使用ApplicationContext ,但是BeanFactory仍然可用于轻量级应用,如 设备或applet-based 应用。

2.   Bean定义

Bean是所有Spring Ioc容器管理的应用后台对象。IoC容器读取从配置metadata文件获取bean的定义信息,包含 如何创建bean、bean的生命周期、bean的依赖三方面:

Class

此属性是强制的,指定创建bean对象的类

Name

指定bean的唯一识别标志;xml配置文件中使用id或name属性

Scope

Bean对象的scope

constructor-arg

用来注入依赖

properties

注入依赖

autowiring mode

注入依赖

lazy-initialization mode

告诉Ioc容器是在首次调用创建bean实例

initialization method

Bean的所有必要属性设置完成后,被回调的函数

destruction method

Bean销毁后,被回调的函数

正如上文提到,提供配置metadata的三种方式:

  • l  Xml配置文件
  • l  注释方式
  • l  Java代码方式

3.   Bean scope

singleton

单例模式,Spring每次返回同一个对象

prototype

原型模式,一个bean定义适用于任意多个对象实例

Request

一个bean定义适用于 Http请求

Session

一个bean定义适用于HTTP session

global-session

一个bean定义适用于global HTTP session

4.   Bean生命周期

Bean创建后,需要完成初始化;bean从容器移除后,需要执行清理动作;

Initialization callbacks

接口org.springframework.beans.factory.InitializingBean 方法afterPropertiesSet()定义初始化;

public class ExampleBean implements InitializingBean {

   public void afterPropertiesSet() {

      // do some initialization work

   }

}

或者

         <bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>

Init-method 属性指定初始化方法 名称;

public class ExampleBean {

   public void init() {

      // do some initialization work

   }

}

5.   Bean post process(后处理)

BeanPostProcessor后处理 接口定义的回调函数,支持可定制的实例化逻辑、依赖逻辑等。用户可通过插入一个或多个“后处理”实现,定制化bean实例。

6.   Bean 定义继承

Bean定义中包含的配置信息、构造参数、属性值,以及容器指定信息 如初始化方法、静态工厂名称等,都可以通过继承方式 child bean获得。这里的“继承”与Java中的“继承”没有任何关系,但含义是一样的。

Bean 模板beanTeamplate,指定 abstract属性为 true,不能指定class

<bean id = "beanTeamplate" abstract = "true">

      <property name = "message1" value = "Hello World!"/>

      <property name = "message2" value = "Hello Second World!"/>

      <property name = "message3" value = "Namaste India!"/>

   </bean>

 

<bean id = "helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "beanTeamplate">
      <property name = "message1" value = "Hello India!"/>
      <property name = "message3" value = "Namaste India!"/>
   </bean>

 

posted @ 2018-12-09 23:39  A.ArmStrong  阅读(614)  评论(0编辑  收藏  举报