spring bean的作用域和生命周期
容纳bean
(1)bean工厂:最简单的容器,提供了基础的依赖注入支持,创建各种类型的bean
(2)应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务
从ApplicationContext上下文容器中获取bean和从bean工厂容器中获取bean的区别“
bean的作用域
Spring Framework支持五种作用域(其中有三种只能用在基于web的)。
在每个Spring IoC容器中一个bean定义对应一个对象实例。 |
|
一个bean定义对应多个对象实例。 |
|
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。 |
|
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。 |
|
在一个全局的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)
相关推荐
主要介绍了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
主要介绍了浅谈Spring中Bean的作用域、生命周期,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了深入了解Spring中Bean的作用域和生命周期,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://cici9898-007.iteye.com/blog/1407695
Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的生命周期、通过...
请解释Spring Bean的生命周期 Spring Bean的作用域之间有什么区别 什么是Spring inner beans Spring框架中的单例Beans是线程安全的么 请举例说明如何在Spring中注入一个Java Collection 如何向Spring Bean中注入一个...
spring框架技术+第2天+xmind思维导图:生命周期,介绍simple project,打印出构造方法...bean作用域request session globalSession:web项目获取核心配置文件要配置两个地方:spring监听器、spring作用域范围的监听。
Spring Bean的生命周期? Spring中bean的作用域 说一下Spring基于xml注入bean的几种方式? Spring如何解决循环依赖问题? Spring的自动装配 Spring框架中都用到了哪些设计模式? Spring框架中有哪些不同类型的事件?
1.spring中bean实例化的俩种方式 2.spring中bean的各种元素如何使用 ...4.spring中不同类型bean的作用域 5.spring中bean的生命周期 通过我的项目,可以跟着学习SPringIoC容器和Bean管理,帮助你快速上手SSM框架
以及bean的autowire和继承与依赖,以及bean的作用域。 spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及...
摘录了spring的核心逻辑,代码极度简化,保留spring的核心功能,如IoC和AOP,资源加载器,事件监听器,类型转换,容器扩展点,bean生命周期和作用域,应用某些等核心功能。 如果本项目能帮助到你,请给个STAR,谢谢...
05_配置Spring管理的bean的作用域 06_Spring管理的Bean的生命周期 07_编码剖析Spring依赖注入的原理 08_编码剖析Spring装配基本属性的原理 09_Spring如何装配各种集合类型的属性 10_使用构造器装配属性 11_用...
提取了Spring的核心逻辑,极大地简化了代码,并完善了Spring的核心功能,例如IoC和AOP,资源加载器,事件侦听器,类型转换,容器扩展点,Bean生命周期和作用域以及应用程序上下文,被保留。 如果这个项目可以为您...
11、Spring Bean 的作用域之间有什么区别? 12、什么是 Spring inner beans? 13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean ...
11、Spring Bean 的作用域之间有什么区别? 12、什么是 Spring inner beans? 13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean ...
Hibernate: 第一课:第一个hibernate项目 第二课:测试实体对象的生命周期 ...第三课:spring Bean的作用域 第四课:spring对AOP的只是(采用Annotation的方式) 第五课:spring对AOP的只是(采用配置文件的方式)
本篇博文适合零基础的同学:主要包括:spring介绍; Ioc 入门案例; Di 入门案例; 核心API介绍;...bean作用域; 生命周期; 属性注入--setter方法 p命名空间; sqel; 集合注入; 装配bean基于注解;
3. Spring Bean部分围绕Bean的生命周期、作用域、自动装配等进行了详细阐述。 4. 注解部分列举了常用的Spring注解及其作用,如@Component、@Autowired等。 5. 数据访问部分涉及了Spring对JDBC、Hibernate等数据访问...