文档章节

入门 07 - Bean生命周期

apsaras
 apsaras
发布于 2016/06/20 09:42
字数 604
阅读 2
收藏 0


 在Spring中,从BeanFactory取得的实例为Singleton,预设是每一个别名维持一个实例,对单执行绪的程序来说并不会有什么问题,但对于多执行绪的程序,您必须注意到执行绪安全,您也可以设定每次从BeanFactory取得 Bean时,都产生一个新的实例,例如:

<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" singleton="false">


 singleton预设是true,藉由将其设定为false,每次取得Bean时都会产生一个新的实例。
 BeanFactory 负责Bean的生命周期,包括Bean的生成与销毁、Bean的创建方式(是否为singleton)、Bean的属性设定、依赖关联的建立等。如果您要在Bean的生命周期的某个阶段作一些事情,可以有几个方式,第一个方式是实作Spring所提供的相关接口,透过实作 org.springframework.beans.factory.InitializingBean、 org.springframework.beans.factory.DisposableBean,您可以在Bean创建与销毁时作一些事情:

public interface InitializingBean {

    void afterPropertiesSet() throws Exception;

}

 

public interface DisposableBean {

    void destroy() throws Exception;

}


 实作接口使得Spring的特定接口侵入Bean的实作中,这并不是个很好的作法,考虑到Bean的可移植性,您可以考虑统一Bean的初始化与销毁方法,并在Bean定义档中宣告在初始化或销毁Bean时使用这些方法:

<bean id="helloBean" class="onlyfun.caterpillar.HelloBean"

                           init-method="init"

                           destroy-method="destroy">


 在实作Bean时,只要加入这些方法即可,例如:

public class HelloBean {

    public void init() {

        ....

    }  

  

    ....

  

    public void destroy() {

        ....

    }

}


 这样作的好处是可以不引入任何Spring特定的接口,使得Bean可以轻易的从Spring框架中脱离,只要您所采用的另一个框架可以支持您所自订的初始化与销毁方法,Bean就不用任何的修改,然而这个方法事实上还是依赖于容器,容器必须有呼叫这些方法的能力,只是 这些方法的名称可以由我们自行决定,而不用实现特定的接口。
 除了上面两种方式,您还可以在Bean的建构函式或setter中作一些类似的初始化动作,这可以使得Bean不依赖于特定接口或容器功能,然而销毁时的动作就比较麻烦,因为finalize()执行的时间是由GC决定的,您只能在当中放一些不是实时性需求的销毁相关动作。

本文转载自:http://jportal.iteye.com/blog/960770

apsaras
粉丝 8
博文 90
码字总数 0
作品 0
海淀
架构师
私信 提问
Spring Aware 到底是什么?

通过如下前序两篇文章: Spring Bean 生命周期之“我从哪里来”? Spring Bean 生命周期之“我要到哪里去”? 我们了解了 Spring Bean 的生命周期核心内容,bean 是如何被初始化变为 的状态,...

tan日拱一兵
07/19
32
0
spring boot Filter 注入bean

在springMvc 中 如果spring容器想管理Filter的生命周期时候,我们需要使用DelegatingFilterProxy在web.xml 配置,再新建个Filter的Bean。 但是在spring-boot中,通过config配置会初始化两个相...

xiaomin0322
01/11
17
0
Lody/WelikeAndroid

##WelikeAndroid 是什么? WelikeAndroid 是一款引入即用的便捷开发框架,致力于为程序员打造最佳的编程体验, 使用WelikeAndroid, 你会觉得写代码是一件很轻松的事情. ##欢迎加入我们的Android...

Lody
2015/08/15
0
0
Hasor-0.0.1.20130831-M1,Hasor首次发布

Hasor首次发布包含Hasor-Core和Hasor-MVC两个组件。 Hasor-Core: 01.)基于COC原则。基本的开发不需要任何配置。 02.)支持模块生命周期调度;支持模块依赖循环检测;启动时提示模块依赖树。 ...

哈库纳
2013/08/31
402
2
Java maven项目在window下运行正常,部署到Linux环境中启动报错,是由什么引起的?

设定默认时区为:GMT+8 2018-07-19 18:58:12,013 [INFO ] com.eos.manager.web.listener.SpringContextListener.contextInitialized(SpringContextListener.java:17) - 加载SpringBean模块 ......

豫华商
2018/07/20
626
4

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部