Spring入门(Bean配置项、生命周期等)

在Spring的IOC里边,把容器配置到IOC容器里边的这种实体或者对象都成为Bean。
容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。

Bean的配置项
以下只是一些常用的
Id:在整个IOC容器中这个Bean的唯一标识
Class:是具体要实例化的哪一个类
Scope:它的范围,也就是作用域
Constructor arguments:构造器的参数
Properties:它的一些属性
Autowiring mode:自动装配的模式
lazy-initialization mode:懒加载模式
Initialization/destruction method:初始化和销毁的方法

理论上在使用时,只有Class是必须配置的,但是如果我们想从Bean容器中得到某一个实例,一种是通过ID来获取,另一种是根据Bean的类型来获取。如果是第一种则要配置id,第二种则只需要配置class。

Bean的作用域(scope)
singleton:单例,指一个Bean容器中只存在一份
prototype:每次请求(每次使用)创建新的实例,destroy方式不生效(每次向IOC容器请求要得到一个对象的时候,都会重新创建一个新的实例,也就是重新new一次,对于它来说,destroy是不生效的,因为请求完成后实例也就不再被继续使用了,被垃圾回收器回收)。
request:每次http请求创建一个实例且仅在当前request内有效(生存周期就是在一个request内,只要是在当前的request范围内,任何时候任何地方调用,也就是去IOC容器中去申请,它都是同一个实例)。
session:同上,每次http请求创建,当前session内有效
global session:基于portlet的web中有效(protlet定义了global session),如果是在web中,同session

Bean的生命周期
定义:在Bean的配置文件,就是xml文件中配置的Bean,定义了id、class,这就是Bean的定义
初始化:当IOC容器在启动的时候,加载并配置文件里边的Bean,也就是生成Bean的实例
使用:在单元测试中或实际的开发中,从Bean容器中取出一个Bean的实例然后去调用它的方法
销毁:在Bean容器停止的时候去销毁由当前这个Bean容器创建的所有Bean的实例

初始化的两种方式
1.实现org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法
举例说明

public class ExampleInitializingBean implements InitializingBean{
    @Override
    public void afterPropertiesSet() throws Exception{
        //do something
    }
}

也就是定义了一个class来implements InitializingBean,实现里边的afterPropertiesSet方法,和下边的第二种方法类似,不过下边一种是init()方法。在配置的时候只需要配置到class即可,不需要配置init-method。这样当IOC容器在加载这个Bean的时候,判断它是否实现了InitializingBean这个接口,当它实现了就会去afterPropertiesSet方法里边去执行一些初始化的操作。

2.配置init-method
举例说明
在配置的时候<bean id="exampleInitBean" class="examples.ExampleBean" inti-method="init"/>
然后是实现

public class ExampleBean{
    public void init(){}
}

当IOC容器加载这个Bean并初始化它的时候,就会根据init-method指定的方法去调用ExampleBean中的init()方法,在这里去执行一些初始化的操作。

销毁的两种方式
1.实现org.springframework.beans.factory.DisposableBean接口,覆盖destroy方法
2.配置destroy-method
实现的方式和初始化类似,就不举例说明。

前边说到的两种初始化和两种销毁的方法都是针对具体的某一个Bean的配置。还有一种就是配置全局默认初始化、销毁方法。
在bean配置文件的最外层的beans里边配置default-init-method和default-destroy-method。这样的话在这个bean配置文件里的所有bean在初始化的时候,也就是IOC容器这些bean的时候都会调用init方法,最后在销毁的时候都会调用这个destroy方法。

这时候会有疑问,当三种方法(默认配置、bean配置、实现接口)同时使用的时候,顺序是什么样的?
实现接口的两种方法要优先于bean配置init-method和destroy-method。
同时要注意当前两种方法在使用的时候,默认配置的那种方法是不生效的。也就是说有实现了初始化和销毁bean的接口,或者配置了init-method和destroy-method,即使有写default-init-method和default-destroy-method,不实现这两个方法也没问题。
实际上default-init-method和default-destroy-method是可选的,即使配置了也可以不实现。但是在bean里边配置init-method和destroy-method,必须要实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值