Spring学习之Bean详解

本文深入探讨了Spring框架中的依赖注入(DI)概念,并详细解释了如何通过IOC容器管理和装配Bean。介绍了Bean工厂与应用上下文的作用及区别,以及Bean的生命周期管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、理解反向控制(IOC)

依赖注入(di):比IOC更好的名字。获得依赖对象的方式反转了。

IOC应用:ioc或者说di,还可以达到解耦的目的

二、装配Bean

(1)容纳你的bean

bean工厂:最简单的容器,提供了基础的依赖 注入支持。

创建各种类型的Bean.应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务。

<span style="font-size:14px;"><bean scope=“singleton|prototype|request|session” /> 
singleton: 单例 默认值
prototype: 原型  
request: 一次请求有效( java web开发中)
session: session级有效(java web开发中)
</span>

(2)工厂设计模式

创建分发各种bean。配置好它们之间的写作关系,参与bean的生命周期。

BeanFactory factory = new XmlBeanFactory(
	new ClassPathResource("applicationContext.xml"));
bean工厂只把bean的定义信息载进来,用到的时候才实例化。
factory.getBean("mybean");就可得到一个bean。

(3)使用应用上下文

ApplicationCotext,spring更加高级的容器。功能强大:

1.提供文本信息解析工具,包括对国际化支持。

2.提供载入文件资源的通用方法,如图片。

3.可以向注册为监听器的bean发送事件。

在很少的情况下,使用BeanFactory,如在移动设备。


三种经常用到的实现:

<span style="font-size:14px;">1.ClassPathXmlApplicationContext:从类路径中加载。
2.FileSystemXmlApplicationContext:从文件系统加载。
3.XmlWebApplicationContext:从web系统中加载。
ApplicationContext context = new FileSystemXmlApplicationContext(" c:\foo.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");</span>
除了应用上下文提供的附加功能外,应用上下文与bean工厂的另一个重要区别是关于单例bean如何被加载。

bean工厂延迟加载所有bean,直到getBean()方法被调用。

应用上下文会(applicationContext)在启动后预载入所有单例bean.这样可确保应用不需要等待他们被创建。

(4)bean的生命周期  

bean被载入到容器中时,他的生命周期就开始了。:


1.容器寻找bean的定义信息并实例化。

2.使用依赖注入,spring按bean定义信息配置bean的所有属性。

3.若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递bean的ID。

4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。

5.若BeanPostProcessor(bean后置处理器)和bean关联,则它们的 postProcessBeforeInitialization()方法被调用。 [过滤器举例理解]

6.若bean指定了ini-method方法、,它将被调用。

7.最后,若有BeanPostProcessor和bean关联,则它们的  postProcessAfterInitialization()方法被调用。

将bean从工厂中删掉有两种方法:

1.若bean实现了DisposableBean接口, distroy()方法被调用。

2.如果指定了定制的销毁方法,就调用这个方法。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐刘根

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值