Spring学习之Bean详解

来源:互联网 发布:手机编程入门自学 编辑:程序博客网 时间:2024/05/02 04:41


一、理解反向控制(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 0
原创粉丝点击