码迷,mamicode.com
首页 > 编程语言 > 详细

【Spring IoC】Spring Bean(二)

时间:2019-09-19 14:28:51      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:注入   原型   设置   定义   实现   false   就是   one   getbean   

一、Spring Bean的定义

被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由容器提供的配置元数据创建的。

 bean 定义包含称为配置元数据的信息。主要包括:

  • 如何创建一个 bean
  • bean 的生命周期的详细信息
  • bean 的依赖关系

每个 bean 可以定义的属性有:

  • class:必填,用来定义类的全限定名(包名+类名)。只有子类Bean不用定义该属性。
  • id:Bean的唯一标识名。它必须是合法的XML ID,在整个XML文档中唯一。
  • name:用来为id创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分开。你可以使用 ID 和/或 name 属性来指定 bean 标识符。
  • parent:子类Bean定义它所引用它的父类Bean。这时前面的class属性失效。子类Bean会继承父类Bean的所有属性,子类Bean也可以覆盖父类Bean的属性。注意:子类Bean和父类Bean是同一个Java类。
  • abstract(默认为”false”):用来定义Bean是否为抽象Bean。它表示这个Bean将不会被实例化,一般用于父类Bean,因为父类Bean主要是供子类Bean继承使用。
  • singleton(默认为“true”):定义Bean是否是Singleton(单例)。如果设为“true”,则在BeanFactory作用范围内,只维护此Bean的一个实例。如果设为“flase”,Bean将是Prototype(原型)状态,BeanFactory将为每次Bean请求创建一个新的Bean实例。
  • lazy-init(默认为“default”):用来定义这个Bean是否实现懒初始化。如果为“true”,它将在BeanFactory启动时初始化所有的Singleton Bean。反之,如果为“false”,它只在Bean请求时才开始创建Singleton Bean。lazy-init 设置只对scop属性为singleton的bean起作用。
  • autowire(自动装配,默认为“default”):它定义了Bean的自动装载方式。
    • “no”:不使用自动装配功能。
    • “byName”:通过Bean的属性名实现自动装配。
    • “byType”:通过Bean的类型实现自动装配。
    • “constructor”:类似于byType,但它是用于构造函数的参数的自动组装。
    • “autodetect”:通过Bean类的反省机制(introspection)决定是使用“constructor”还是使用“byType”。
  • dependency-check(依赖检查,默认为“default”):它用来确保Bean组件通过JavaBean描述的所以依赖关系都得到满足。在与自动装配功能一起使用时,它特别有用。depends-on(依赖对象):这个Bean在初始化时依赖的对象,这个对象会在这个Bean初始化之前创建。
    • none:不进行依赖检查。
    • objects:只做对象间依赖的检查。
    • simple:只做原始类型和String类型依赖的检查
    • all:对所有类型的依赖进行检查。它包括了前面的objects和simple。
  • init-method:用来定义Bean的初始化方法,它会在Bean组装之后调用。它必须是一个无参数的方法。
  • destroy-method:用来定义Bean的销毁方法,它在BeanFactory关闭时调用。同样,它也必须是一个无参数的方法。它只能应用于singleton Bean。constructor-arg:用来注入依赖关系的
  • factory-method:定义创建该Bean对象的工厂方法。它用于下面的“factory-bean”,表示这个Bean是通过工厂方法创建。此时,“class”属性失效。
  • factory-bean:定义创建该Bean对象的工厂类。如果使用了“factory-bean”则“class”属性失效。
  • scope:指定由特定的 bean 定义创建的对象的作用域,可以有singleton、prototype、request、session和global session

二、Spring Bean的作用域

  当在 Spring 中定义一个 bean 时,你必须声明该 bean 的作用域的选项。例如,为了强制 Spring 在每次需要时都产生一个新的 bean 实例,你应该声明 bean 的作用域的属性为 prototype。同理,如果你想让 Spring 在每次需要时都返回同一个bean实例,你应该声明 bean 的作用域的属性为 singleton。
  Spring 框架支持以下五个作用域,分别为singleton、prototype、request、session和global session。

1. singleton

singleton 是默认的作用域,也就是说,当定义 bean 时,如果没有指定作用域配置项,则 bean 的作用域被默认为 singleton。 

当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,singleton作用域是Spring中的缺省作用域。你可以在 bean 的配置文件中设置作用域的属性为 singleton。

2. prototype

当一个bean的作用域为prototype,表示一个bean定义对应多个对象实例。

prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例

prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

3. request

每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境。

4. session

同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境

5. global-session

一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境。

三、Spring Bean的生命周期

 

 

四、Spring Bean的继承

 

【Spring IoC】Spring Bean(二)

标签:注入   原型   设置   定义   实现   false   就是   one   getbean   

原文地址:https://www.cnblogs.com/myitnews/p/11548748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!