首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring 学习札记 (二)

2013-08-01 
Spring 学习笔记 (二)?? ? ? ? 使用这个配置,Spring先通过调用静态工厂方法创建bean,然后再设置这个bean的

Spring 学习笔记 (二)

?

? ? ? ? 使用这个配置,Spring先通过调用静态工厂方法创建bean,然后再设置这个bean的属性.

? ? (3) 调用实例工厂方法.这种方式需要事先配置一个工厂bean,这个bean实例有工厂方法,负责产生具体的bean.

? ? ? ??

?

? ? ? ??

13. 抽象bean和子bean

? ? 重象bean相当于一个bean配置模板,需要设置bean标签属性 abstract="true".抽象bean不会被Spring容器实例化,所以可以不必配置

? ? class属性.子bean继承抽象bean配置时,需要为bean标签加一个parent属性.

? ??

14. 工厂bean

? ? 工厂bean是实现了FactoryBean接口的bean,配置了这个bean,在通过id调用getBean时,返回的不是这个工厂bean实例,而是

? ? 调用这个工厂的getObject()方法后返回的返回值.

? ? 如果要获取这个工厂bean本身的实例,则在传递给getBean方法的id前加"&".

? ??

15 强制初始化bean

? ? 下面的配置片段,depends-on="manager"表示在初始化bean1之前会强制初始化manager

? ??

?

? ??

16. 获取bean本身的id,可以让bean实现BeanNameAware接口,该接口中有个setBeanName(String name)方法.这个setter方法?

? ? 由Spring容器调用,初始化bean时,会调用这个方法,把bean的id设置进来.

? ??

17. bean的生命周期

? ? singleton作用域的bean的生命周期使用Spring管理,

? ? prototype的Bean,Spring负责创建,每次产生一个全新的实例,然后不再跟踪

? ? 这个实例的生命周期,客户端代码自己管理.

? ? singleton作用域的bean的生命周期分为:

? ? (1) 注入依赖关系之后:

? ? ? ? 配置init-method属性或者让bean实现initializingBean接口(void afterPropertiesSet() throws Exception)?

? ? ? ? 如果同时配置了init-method,又实现了接口,则先调用接口方法,然后再调用init-method

? ? (2) bean销毁之前

? ? ? ? 配置destory-method属性 或者 实现 DisposableBean接口

? ? ? ? 同时配置,则先执行那个接口方法,然后再执行destory-method属性中配置的bean的方法;

? ? ? ??

? ? ? ? 优雅关闭Spring容器,调用AbstractApplicationContext的registerShutdownHook()方法,

? ? ? ? JVM就会在关闭前优雅的关闭Spring容器,并保证在关闭Spring容器之前调用singleton Bean的

? ? ? ? 析构回调方法.

? ? ? ??

18. 协调作用域不同步的Bean

? ??

? ? 问题描述: 用户多次请求singleton的bean,该bean被注入了prototype的属性,由于注入只发生一次,导致

? ? 每次请求singleton时,获得的prototype都是同一个prototype类型的bean,这就违背了prototype的初衷.

? ??

? ? 解决方式:使用lookup方法:让Spring重写容器中获取prototype类型的bean的抽象方法,返回查找到容器中其他bean.

? ??

? ? (1) 配置一个prototype的bean(A),供别的bean依赖

? ? (2) 在一个singleton的bean(B)中,创建一个抽象的方法,获取上面的被依赖bean

? ? (3) 在bean(B)的配置中使用lookup-method属性配置,配置片段如下:

? ? ? ??

?

? ?

热点排行