2009年3月6日星期五

Spring:IOC容器-依赖

1.注入依赖
1)构造器注入
1)构造器参数解析
2)构造器参数类型匹配
3)构造参数索引
2) Setter注入
3)一个替代构造器的方法,采用static工厂方法返回对象实例

2. 依赖配置详解
1)直接变量(基本类型、Strings类型等。)
2)idref元素,提供错误验证功能。local。。。
3) 引用其它的bean(协作者)。ref bean, ref local。
4)内部bean,内部bean中的scope标记及idname属性将被忽略。内部bean总是匿名的且它们总是prototype模式的。同时将内部bean注入到包含该内部bean之外的bean是可能的。
5)集合。元素。
6)集合的合并。parent-style和child-style。父子集合元素合并后的值就是子集合中的最终结果,而且子集合中的元素值将覆盖父集全中对应的值。merge 属性。
7)强类型集合(仅适用于Java5+)。
8) Nulls。
9)
XML配置文件的简写及其他
1)XML-based configuration metadata shortcuts
2) 使用p名称空间配置属性。p 表示属性。。。
10)组合属性名称。属性的属性的属性。。。
3. 使用depends-on 依赖关系不是太直接。。。 多个时候 “ , ”
4.延迟初始化bean。bean - lazy-init。beans - default-lazy-init
5.自动装配(autowire)协作者。自动装配(autowire)。
1)
Autowiring modes:no,byName,byType,constructor,autodetect。
2)如果直接使用propertyconstructor-arg注入依赖的话,那么将总是覆盖自动装配。
3)优点:a.自动装配能显著减少配置的数量,b.自动装配可以使配置与java代码同步更新
4) 缺点:a.装配不明确可能出现难以预料的结果,对象之间的关联关系也不再能清晰的进行文档化,b.对于那些根据Spring配置文件生成文档的工具来说,自动装配将会使这些工具没法生成依赖信息。
5) 将bean排除在自动装配之外.a.bean中autowire-candidate属性可被设为false.b.元素的'default-autowire-candidates'属性中进行设置
6.
依赖检查.
1)在bean定义中为dependency-check属性
2)依赖检查方式:none,simple,object,all.
7.方法注入
1)放弃控制反转。通过实现BeanFactoryAware接口让bean A能够感知bean 容器,并且在需要的时候通过使用getBean("B")方式向容器请求一个新的bean B实例。耦合高,不推荐。
2)Lookup方法注入。
Lookup方法注入利用了容器的覆盖受容器管理的bean方法的能力,从而返回指定名字的bean实例。 Lookup方法注入适用于原型bean。Lookup方法注入的内部机制是Spring利用了CGLIB库在运行时生成二进制代码功能,通过动态创建Lookup方法bean的子类而达到复写Lookup方法的目的。(需要CGLIB支持,子类化的类不能是final的,要覆盖的方法也不能是final的,不能是序列化的(serialized)。)
3)自定义方法的替代方案。当使用基于XML配置元数据文件时,可以在bean定义中使用replaced-method元素来达到用另一个方法来取代已有方法的目的.在元素内可包含一个或多个元素

没有评论: