原创

spring回顾-bean标签详解

温馨提示:
本文最后更新于 2022年06月19日,已超过 7 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

bean的基本配置

<bean id="" class=""/>

image-20220619201058815

思考:

  • class属性能不能写接口如BookDao的类全名呢?

答案肯定是不行,因为接口是没办法创建对象的。

  • 前面提过为bean设置id时,id必须唯一,但是如果由于命名习惯而产生了分歧后,该如何解决?

image-20220619201236237

bean的别名配置

bean的别名配置可以使用name属性进行配置,里面可以书写很多的别名,每一个别名之间使用,隔开,并且ref属性的引用也可以使用别名

bean的作用范围配置

验证ioc容器中的bean对象是否是单列的

什么称之为单列呢

在我们获取多个bean对象的时候后bean对象是否是引用的同一个地址,如果是同一个地址则被称之为单列模式,否则就不是

在bean标签的属性当中,可以使用scope属性来标识一个bean对象的获取是否是单列

  • singleton默认为单例
  • prototype为非单例

单列模式和非单列模式的区别

介绍完scope属性以后,我们来思考几个问题:

  • 为什么bean默认为单例?
    • bean为单例的意思是在Spring的IOC容器中只会有该类的一个对象
    • bean对象只有一个就避免了对象的频繁创建与销毁,达到了bean对象的复用,性能高
  • bean在容器中是单例的,会不会产生线程安全问题?
    • 如果对象是有状态对象,即该对象有成员变量可以用来存储数据的,
    • 因为所有请求线程共用一个bean对象,所以会存在线程安全问题。
    • 如果对象是无状态对象,即该对象没有成员变量没有进行数据存储的,
    • 因方法中的局部变量在方法调用完成后会被销毁,所以不会存在线程安全问题。
  • 哪些bean对象适合交给容器进行管理?
    • 表现层对象
    • 业务层对象
    • 数据层对象
    • 工具对象
  • 哪些bean对象不适合交给容器进行管理?
    • 封装实例的域对象,因为会引发线程安全问题,所以不适合。

image-20220619213749825

正文到此结束