spring2.5官方手册备忘录(1)

spring2.5官方手册备忘录(一)
忘性越来越大了,培养培养记东西的习惯,拿这个练练手,看得快,理解错了感谢给我指正,只记了本人关注的

一.2.0和2.5的新特性
1.从2.0起,bean的作用域选项变多了,原来只有singleton和prototype

2.从2.0起,dtd变成了Schema,因此多了一堆让你“方便”的元素

3.从2.0起,进一步向Annotation方向靠拢

4.从2.5起,可以通过配置表达式自动在classpath中搜索被注解的类,自动转化成bean,并自动注入依赖,如@Component,@Repository,@Service,@Controller,它们目前版本意义都是一样的,写在不同层面方便看而已

5.从2.5起,springMVC框架变动挺大,主要是完善了Annotation,加上@Autowired等注解,减少了大量各种bean的显式配置,CoC的影响越来越大了,反之,觉得学习成本变高了

二.核心部分
(依赖注入部分)
1.property元素下的idref,只引用bean的名字,和value一个意思,不同之处在于万一拼错了可以直接被验证(和某个方法参数需要字符串类名,但设计者要求传入类的Class对象,而不是字符串表示的类名是一个意思,为了不让你犯拼写错误)

2.内部bean都是prototype类型的

3.从2.0起,bean中集合属性可以通过merge元素属性来和父bean自动合并了

4.从2.0起,增加了p命名空间以简化property元素,不过觉得没什么用,不容易阅读

(bean生命周期部分)
5.IoC容器(ApplicationContext)启动时会默认实例化所有singleton的bean,可以通过bean的lazy-init="true"属性来使得运行时才实例化

6.bean的scope默认是singleton

7.其余bean的生命周期属性(request,session,global session),只能在web应用下使用,如果MVC框架不是springMVC,则还要额外添加org.springframework.web.context.request.RequestContextListener监听器,如果web容器servlet版本小于2.4,则只能用另外的过滤器org.springframework.web.filter.RequestContextFilter

8.global session目前只用于portlet项目

9.将非singleton的bean,注入到singleton的bean里,需要注意引用的唯一性,prototype可以运用方法注入,request,session则需要应用<aop:scoped-proxy/>元素动态生成代理(需要cglib库)

10.为了让bean能够在初始化和销毁时执行特定的操作,可以实现InitializingBean和DisposableBean接口,但这样会造成耦合,最好用bean的init-method和destroy-method属性,自己写init和destory方法,如果想在项目中统一方法名称,可以在beans根元素里用default-init-method和default-destroy-method属性,IoC容器会自动调用每个bean的同名方法,不过好像也不怎么灵活

11.2.5版本新增了@PostConstruct和@PreDestory注解,成为特性10的第三种解决办法,并且在生命周期方法发生冲突时,执行顺序如下:
@PostConstruct > InitializingBean的afterPropertiesSet() > 自定义init()
无论如果,init()只会被调用一次,析构方法和初始化顺序是一样的

12.在非web应用里,IoC容器在应用程序关闭时,需要手动注册关闭回调方法
    ctx.registerShutdownHook();