【SpringDay01之Bean】

SpringBean定义

被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的
bean 定义包含称为配置元数据的信息,下述容器也需要知道配置元数据:

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

上述所有的配置元数据转换成一组构成每个 bean 定义的下列属性
在这里插入图片描述

SpringBean的创建

Bean创建的两种规则:

  • BeanFactory:提供的是一种延迟加载思想来创建bean对象。bean对象什么时候用什么时候创建。
  • ApplicationContext:提供的是一种立即加载的思想来创建bean对象。只要一解析完配置文件,就立马创建bean对象。

Bean的三种创建方法:

  • 第一种:调用默认无参构造函数创建(使用最多)
    默认情况下,如果类中没有默认无参构造函数,则创建失败,会报异常。
  • 第二种:使用静态工厂中的方法创建对象
    需要使用bean标签的factory-method属性,指定静态工厂中创建对象的方法。
  • 第三种:使用实例工厂方法创建

Bean标签

  • 作用:用于配置对象让spring来创建的。
    默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。

  • 属性:
    id:给对象在容器中提供一个唯一标识。用于获取对象。
    class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
    scope:指定对象的作用范围

Spring配置元数据

Spring IoC 容器完全由实际编写的配置元数据的格式解耦。有下面三个重要的方法把配置元数据提供给 Spring 容器:

  • 基于XML的配置文件
  • 基于注解的配置
  • 基于Java的配置

Bean的作用域

当在 Spring 中定义一个 bean 时,你必须声明该 bean 的作用域的选项。例如,为了强制 Spring 在每次需要时都产生一个新的 bean 实例,你应该声明 bean 的作用域的属性为 prototype。同理,如果你想让 Spring 在每次需要时都返回同一个bean实例,你应该声明 bean 的作用域的属性为 singleton。
Spring 框架支持以下五个作用域:在这里插入图片描述

  • singleton 作用域(单例):
    singleton 是默认的作用域,也就是说,当定义 Bean 时,如果没有指定作用域配置项,则 Bean 的作用域被默认为 singleton。
    当一个bean的作用域为Singleton,那么Spring
    IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
    也就是说,当将一个bean定义设置为singleton作用域的时候,Spring IoC容器只会创建该bean定义的唯一实例。
    Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton作用域是Spring中的缺省作用域。
  • prototype 作用域(多例)
    当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。**Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。**根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
  • request:作用范围是一次请求,和当前请求的转发。
  • session:作用范围是一次会话。
  • globalsession:作用范围是一次全局会话。

Bean的生命周期

  • 涉及bean标签的两个属性:
    init-method
    destroy-method
  • 单例:
    出生:容器创建,对象就产生了。
    活着:只要容器在,对象就一直存在。
    死亡:容器销毁,对象消亡。
  • 多例:
    出生:每次使用时,创建对象。
    活着:只要对象在使用中,就一直活着。
    死亡:当对象长时间不使用,并且也没有别的对象引用时,由java的垃圾回收器回收。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值