Spring 新手教程(二) 生命周期和作用域
以下的知识点是针对使用配置文件讲的(annotation相应标签后面文章会具体阐述)
Bean的生命周期:
为什么关心这个问题?
我们使用IOC的目的就是为了让Spring IOC帮我们管理对象。从而不须要去自己手动去new 。何时new,怎么管理对象间依赖,什么时候销毁等等非常多问题。而对象在Spring容器看来就是一个个bean,理所当然要理解Bean的生命周期。
生命周期的过程有哪些?
定义、初始化、使用、销毁。
初始化:(1)实现org.springframework.beans.factory.InitlialzingBean接口。并覆盖当中的afterPropertiesSet方法;
( 2)配置init-method;
销毁:(1)实现org.springframework.beans.factory.DisposableBean接口,并覆盖destory方法;
(2)配置destroy-method;
当然也能够使用配置默认方式(看以下Spirng对应配置文件):
default-init-method="defautInit" default-destroy-method="defaultDestroy
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean; //实际应用中。须要特别注意的是。以下三种初始化和销毁的方法仅仅须要选用一种就可以,继承接口的那种不须要再配置文件里声明。而其它两种则须要在配置文件里声明 //这里是实现了相应的接口,可是注意要覆盖相应的方法
public class BeanLifeCycle implements InitializingBean, DisposableBean { // default-init-method="defautInit" default-destroy-method="defaultDestroy" 配置文件里的默认构造方法
public void defautInit() {
System.out.println("Bean defautInit.");
} // default-init-method="defautInit" default-destroy-method="defaultDestroy" 配置文件里的默认构造方法
public void defaultDestroy() {
System.out.println("Bean defaultDestroy.");
} @Override
//覆盖接口要求的方法
public void destroy() throws Exception {
System.out.println("Bean destroy.");
} @Override
//覆盖接口要求的方法
public void afterPropertiesSet() throws Exception {
System.out.println("Bean afterPropertiesSet.");
} //还有一种方法。在配置文件里规定的 init-method="start" destroy-method="stop" 相应类中声明相应方法
public void start() {
System.out.println("Bean start .");
} //还有一种方法。在配置文件里规定的 init-method="start" destroy-method="stop" 相应类中声明相应方法
public void stop() {
System.out.println("Bean stop.");
} }
这里须要注意几个关系(1)无论是使用默认的初始化和销毁方法,还是继承接口,或者在配置文件里声明,都须要在对应的类中写上对应的方法。
当然,针对更一般的类使用默认设置有灵活性,能够在不同文件里仅仅要改写对应的方法就可以,而不要每次都配置,或者都去实现接口。(2)假设我们三种方法同一时候使用,那么, default-init-method="defautInit"default-destroy-method="defaultDestroy"不起作用。(3)在详细的类中能够不实现默认的详细的方法(仅仅是不报错,可是不起初始化、销毁作用)。可是。假设是继承接口或自己配置,那么在详细类中一定要实现对应方法;
Bean的作用域:
为什么关心这个问题?
同上面生命周期一样,我们必需要关心,Bean在哪些地方能用。不同的http请求来时创建的是不是同一个Bean等问题。而这些直接跟我们开发相关。
Bean的作用域几种类型:
single:单例。一个Bean容器仅仅存在一份;
prototype:每次请求都创建新的实例;
request:每次http请求时创建一个实例,并仅在当前的request内生效;
session:每次http请求时创建一个实例,并仅在当前的session内生效;
<?xml version="1.0" encoding="UTF-8"? >
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" > <!-- 一个web项目能够有许多的spring配置文件,可是这些文件得自己在须要载入对象的时候读取配置文件
scope="singleton,注意这边配置-->
<bean id="beanScope" class="com.xidian.BeanScope" scope="singleton"></bean>
</beans>
非常明显,不同的scope配置,对应的使用效果肯定不同,这要视详细开发要求而定。
你看会了吗?欢迎讨论 http://blog.csdn.net/code_7/
Spring 新手教程(二) 生命周期和作用域的更多相关文章
- Spring之bean二生命周期
上一博客主要学习了下bean的配置.注入.自定义属性编辑器,今天来熟悉bean的生命周期.在开发中生命周期是一个很常见的名词,基本每种编程语言都能找到与它关联的.关于bean的生命周期我在网上也找了好 ...
- Spring02——Spring 中 Bean 的生命周期及其作用域
在前一篇文章中,我们已经介绍了 Spring IOC 的相关知识,今天将为个位介绍 Spring 中 Bean 的相关知识.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java ...
- 第37讲 谈谈Spring Bean的生命周期和作用域
在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...
- 一次性讲清楚spring中bean的生命周期之二:FactoryBean的前世今生
前言 在<spring中FactoryBean是什么bean>一文中,带着小伙伴学习了spring中的FactoryBean,了解了到了FactoryBean其实是一种生产Bean的bea ...
- 面试题: Spring 框架 Bean的生命周期
[Java面试五]Spring总结以及在面试中的一些问题. 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本 ...
- 深究Spring中Bean的生命周期
前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上 ...
- Spring核心技术(六)——Spring中Bean的生命周期
前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承. 定制Bean 生命周期回调 开发者通过实现Spring的InitializeingBean和Dispos ...
- Spring中 bean的生命周期
为什么要了解Spring中 bean的生命周期? 有时候我们需要自定义bean的创建过程,因此了解Spring中 bean的生命周期非常重要. 二话不说先上图: 在谈具体流程之前先看看Spring官方 ...
- 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...
- 一次性讲清楚spring中bean的生命周期之一:getSingleton方法
要想讲清楚spring中bean的生命周期,真的是不容易,以AnnotationConfigApplicationContext上下文为基础来讲解bean的生命周期,AnnotationConfigA ...
随机推荐
- Echarts无数据时只显示文字不显示动画
只需要在option中加入如下代码即可: noDataLoadingOption: { text: '暂无数据', ...
- IO流--FileReader&&FileWriter
(一)FileReader (1)第一种读取方式 package com.songyan.fileReader; import java.io.FileNotFoundException; impor ...
- jvm-监控指令-jstack
格式: jstack [option] vmid 选项: -l 除了堆栈信息外,显示关于锁的附加信息. 作用: 生成虚拟机当前时刻的线程快照. 目的: 定位线程长时间停顿的原因,比如线程间死锁.死循环 ...
- 【json】前台ajax序列化的多个属性拼接在一起的字符串,转化为JSONObject对象
1.首先看一下前台序列化了哪些东西: 部分js代码 //查询按钮 $(".questButton").click(function(){ $.ajax({url:"/qu ...
- 面试题:判断两个字符串是否互为回环变位(Circular Rotaion)
题干: 如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t 的回环变位(circular rotation). 例如,ACTGACG 就是 TGACG ...
- Invalidate、RedrawWindow与UpdateWindow的差别
一:什么时候才会发生重绘窗体的消息? 当须要更新或又一次绘制窗体的外观时,应用程序就会发送WM_PAINT消息. 对窗体进行又一次绘制. 二:Invalidate() -- RedrawW ...
- Java笔记7:最简单的网络请求Demo
一.服务器端 1 新建一个工程,建立一个名为MyRequest的工程. 2 FileàProject StructureàModulesà点击最右侧的“+”àLibraryàJava 找到Tomcat ...
- 手机SD卡损坏补救措施
现在的应用程序越来越重,比如微信.来往之类的,稍微用一段时间,就会占用几十MB甚至上百MB的空间.而有时候甚至手机会出现"无响应"的现象,需要你选择"继续等待" ...
- HTTP——代理协议 HTTP/1.1的CONNECT方法
我们平时使用HTTP协议无非就是GET.POST这些方法,但是HTTP的内容远不止那些.今天就来说说HTTP代理使用的CONNECT.这个不是在网页开发上用的,如果没兴趣就跳过吧. APACHE只是作 ...
- 在LoadRunner脚本中实现随机ThinkTime
一般情况下,我们都是通过Run-Time Settings来设置Think Time(思考时间),可以设置回放脚本时忽略思考时间,或者是设置回放随机的一段思考时间. By default, when ...