论坛首页 Java企业应用论坛

Spring自动绑定技术

浏览 2897 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-27  

Autowiring collabraotors自动绑定
    1、 byType   根据类型自动绑定,如果同种类型的实例在容器中不是唯一的,将会产生异常
           byName  根据属性名查找相同的实例名绑定,如属性名master,Spring 将会找名字为master的实例
           constrctcor  类似于byType,在容器中找和类型一致的唯一的bean实例,如果没有找到会产生异常
           autodetect   根据反射到类的情况,如果发现有默认的构造器就会使用byType,否则使用constrctor
          不管是哪种类型的绑定,spring都是先在本容器中查找,如果没有匹配的再到父容器中查找。
     2、自动绑定带来的好处
              1、简化了配置文件,无需再显式的写出依赖关系
              2、自动绑定使你的配置自动更新,如:你在一个类中新加了个依赖,spring会自动帮你完成绑定,你无需更改配置文件。
           自动绑定带来的坏处
              1、自动绑定使配置容易产生歧义相对显示的写出这些依赖关系,不能过明显的看出类之间的依赖关系;
              2、自动绑定的信息不会被自动文档工具生成
              3、当你使用byType来绑定,如果容器中同种类型存在多个对象将会产生异常,spring提供了3个机制来解决这样的问题
                      1、取消自动绑定,用显式的方式指明属性的依赖关系
                      2、通过在bean定义时指定将不作为自动绑定对象依赖,将autowire-candiate 属性值设为false
                      3、如果使用的jdk版本在5.0以上可以使用标注来解决
Excluding a bean from being available for autowiring排除某个bean被自动绑定
      1、定义bean时设置autowire-candiate的属性为false
      2、在最高层<beans>里定义default-autowire-candiates属性为一些表达式,如限制一些bean是以Repository结尾的才支持自动绑定可以定义成“*Repository”。如果支持多

个格式,可以以逗号隔开这个表达式。
      3、bean中autowire-candiate的定义后优先级高于beans里定义的default-autowire-candiates,对于这样的bean,default-autowire-candiates不再会起效。
      注:如果在容器有父容器情况时,相同类型的bean实例同样也会被检测到,因此父容器的bean实例同样也需要考虑!

   发表时间:2009-03-09  
看看:依赖 - Spring Framework reference 2.0.5 参考手册中文版
那里讲的很清楚。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics