spring bean的作用域和生命周期
来源:互联网 发布:网络布控坐火车 编辑:程序博客网 时间:2024/03/29 04:40
spring bean的作用域和生命周期
容纳bean
(1)bean工厂:最简单的容器,提供了基础的依赖注入支持,创建各种类型的bean
(2)应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务
从ApplicationContext上下文容器中获取bean和从bean工厂容器中获取bean的区别“
bean的作用域
Spring Framework支持五种作用域(其中有三种只能用在基于web的)。
singleton
在每个Spring IoC容器中一个bean定义对应一个对象实例。
prototype
一个bean定义对应多个对象实例。
request
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的SpringApplicationContext情形下有效。
session
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的SpringApplicationContext情形下有效。
global session
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的SpringApplicationContext情形下有效。
BeanFactory方式(已废弃)
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService userService = (UserService)factory.getBean("userService");
userService.sayHello();
UserService userService = (UserService)factory.getBean("userService");
userService.sayHello();
此种方式实例化该容器时,bean不会被创建(lazy,速度慢,省内存),只有当你去使用bean时才进行加载。
移动设备使用BeanFactory(省内存)。其他九成用ApplicationContext
使用ApplicationContext时,并且为singleton时(prototype不可!),配置的bean不管你用不用,都被实例化(early,好处就是预加载,缺点就是耗内存)
或许bean的方法:
1 ClassPathXmlApplicationContext:从类路径中加载
2 FileSystemXmlApplicationContext: 从文件系统加载
3 XmlWebApplicationContext:从web系统中加载
bean的生命周期(scope=singleton为例说明)
(1)实例化(当程序加载beans.xml文件时),把我们的bean实例化到内存中,也可用factory-method 来调用有参的构造器
(2)设置属性,前提是有setter才能成功
(3)bean实现BeanNameAware接口,则可以通过setBeanName获取id号
(4)bean实现BeanFactoryAware接口,则可以获取beanFactory
(5)bean实现ApplicationContextAware接口,则调用setApplicationContext
(6)bean如果和一个后置处理器关联,则会调用两个方法,见下面的程序示例,执行”before“
(7)实现InitializingBean接口,则会调用afterPropertiesSet()方法
(8)调用定制(只有所配置的bean有,非aop)的初始化方法,xml bean里面写init-method
(9)后置处理器的”after“
(10)使用bean
(11)容器关闭
(12)bean实现DisposableBean的destroy()方法关闭数据连接,socket,文件流等
(13)调用定制的销毁方法 xml bean里面写 destroy-method
实际开发中用(1)(2)(6)(9)(10)(11)
BeanFactory 的话少了(5)(6)(9)
MyBeanPostProcessor.java
package com.myBeanPostProcessor;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;/** * Created by balfish on 15-3-29. */class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("postProcessBeforeInitialization 函数被调用"); return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("postProcessAfterInitialization 函数被调用"); return o; }}
applicationContext.xml的变化
<!--配置自己的后置处理器,类似过滤器-->
<bean id="myBeanPostProcessor"
class="com.myBeanPostProcessor.MyBeanPostProcessor" />
应用场景举例
1 记录每个对象实例化的时间
2过滤每个调用ip
3给所有对象添加属性,或者函数(面向切面aop)
0 0
- spring bean的作用域和生命周期
- Spring Bean的生命周期和作用域
- spring 中bean的作用域和生命周期
- Spring中Bean的生命周期和作用域
- Spring - bean的作用域与生命周期
- Spring中Bean的作用域、生命周期
- Spring Bean--Bean的配置项、作用域、生命周期
- spring三种实例化Bean的方式和管理Bean的作用域和Bean的生命周期
- Spring Bean的配置项:作用域与生命周期
- Spring中bean的作用域与生命周期
- (3)Spring的三种实例 bean 的方式 以及 Spring中bean的作用域。 以及 bean的生命周期
- (2)Spring的三种实例 bean 的方式 以及 Spring中bean的作用域。 以及 bean的生命周期
- 【Spring学习20】bean作用域:理解Bean生命周期
- Spring:Spring入门和bean的生命周期
- spring2 bean作用域 和 生命周期
- Spring-基于注解的配置[03Bean作用范围和生命周期方法]
- Bean的作用域及生命周期
- Bean的作用域及生命周期
- Vector 基本本操作
- uva 10952 Rings'n'Ropes
- 第三章 表,栈,队列
- Oracle PL-SQL Developer集成TFS进行团队脚本文件版本管理
- 初次小试
- spring bean的作用域和生命周期
- Objective-C总Runtime的那点事儿(一)消息机制
- LSTM神经网络的详细推导及C++实现
- 在win10上安装quality center9
- [RealSense]3-ReaSense SDK的接入与封装
- Android Service的启动过程
- jQuery笔记之动画以及tab的切换
- 谈Runtime机制和使用的整体化梳理
- 新买的阿里云ubuntu服务器项目环境配置过程