Spring Bean的配置项:作用域与生命周期

本文详细介绍了Spring框架中Bean的配置选项,包括id、class、scope等,并深入探讨了Bean的作用域(如singleton、prototype等)及其对实例创建的影响。此外,还讲解了Bean的生命周期管理,包括初始化和销毁的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bean的配置项

id:唯一标识
class:具体是哪一个类(理论上是必须的)
scope:范围
constructor arguments:构造器的参数
properties:属性
Autowiring mode:自动装配模式
lazy-initialization mode:懒加载模式
initialization/destruction method:初始化/销毁的方法

1、作用域(scope值)
singletion:单例 指一个bean容器只存在一份(默认模式)
prototype:每次请求会创建新的实例,destory方式不生效
request:对于request创建新的实例,只在当前request内有效
session:对于session创建新的实例,只在当前session内有效
global session:基于portlet(例如单点登录的范围)的web中有效,如果在web中同session

例:

<bean id="beanScope" class="com.imooc.bean.BeanScope" scope="singleton"></bean>
@Test
public void testSay() {
    BeanScope beanScope = super.getBean("beanScope");
    beanScope.say();

    BeanScope beanScope2 = super.getBean("beanScope");
    beanScope2.say();
}

配置了scope=”singleton”后,无论在这里获取了多少个bean的id,实际上都是在同一个Spring IOC容器中得到的一个唯一的实例(因为一直是在同一方法中获取bean),也就是无论获取多少个,其实一直在使用同一个对象。即两次执行say()方法输出对象的hashCode是相同的

<bean id="beanScope" class="com.imooc.bean.BeanScope" scope="prototype"></bean>
  @Test
  public void testSay() {
      BeanScope beanScope = super.getBean("beanScope");
      beanScope.say();

      BeanScope beanScope2 = super.getBean("beanScope");
      beanScope2.say();
   }

如果这里配置了scope=”prototype”,那么两次执行,得到就结果就不一样了,也就是说,不是单例,每次请求(使用对象)都会创建一个新的实例

2、生命周期
定义
初始化(initialization method)
使用
销毁(destruction method)

① 初始化:
方法1:实现org.springframework.beans.foctory.InitializingBean接口,覆盖afterPropertiesSet方法。系统会自动查找afterPropertiesSet方法,执行其中的初始化操作
方法2:.配置init-method
例如设置bean中init-method=”init”那么在初始化过程中就会调用相应class指定类的init()方法进行初始化工作

② 销毁(与初始化类似)
方法1:实现org.springframework.beans.foctory.DisposableBean接口,覆盖destory方法。
方法2:配置destroy-method

③ 配置全局初始化、销毁方法(默认配置)

<beans 
        default-init-method="defaulInit" default-destroy-method="defaultDestory" >    
 </beans>

注意:
当一个bean配置了init-method 和destroy-method的时候,全局配置default-init-method和default-destroy-method会被覆盖掉。并且,实现初始化和销毁的接口的会比在xml中配置bean的方式更先执行。

  • 如果有实现初始化和销毁的接口或者在bean中单独配置的初始化/销毁方法,这个时候可以没有全局配置
  • 即使xml中配置了全局配置,但在代码中没有任何实现的话,bean的执行过程也不会失败(没有实现所以没有输出,但不会报错)。也就是说:全局配置的是一个可选的方法(可有可无),bean中如果配置了初始化和销毁,但没有实际代码实现的话,直接输出报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值