SayNothing
人才
不清楚
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>了解Spring自动装配(一)
了解Spring自动装配(一)
    作者:CodeSmith 来源: 发表时间:2007-12-16

 
 

           基于J2EE平台的框架纷繁复杂。而大多数框架中都有着复杂的配制文件,都需要程序员去研究去掌握(oh,该死的配置文件),Spring作为其中的佼佼者也不能免俗。但它却提供了一套能让程序员偷懒的小规则:自动装配。(感激得,终于了解我们Coder的心声了).
          Spring的IOC容器通过Java反射机制了解了容器中所存在Bean的配置信息,这包括构造函数方法的结构,属性的信息,而正是由于这个原因,Spring容器才能够通过某种规则来对Bean进行自动装配,而无须通过显式的方法来进行配制。

           下面让我们来看看Spring为我们提供的自动装配有那些(通过指定元素的autowire="<自动装配类型>")

              1,byName  根据属性名自动装配。此选项将检查容器并根据名字查找
                                  与属性完全一致的bean,并将其与属性自动装配。
            2,byType   如果容器中存在一个与指定属性类型相同的bean,那么将与
                                  该属性自动装配;如果存在多个该类型bean,那么抛出异常,
                                  并指出不能使用byType方式进行自动装配;如果没有找
                                  到相匹配的bean,则什么事都不发生,也可以通过设置
                                  dependency
-check="objects"让Spring抛出异常。
             3,constructor byType方式类似,不同之处在于它应用于构造器参数。
                                        如
果容器中没有找到与构造器参数类型一致的bean,
                                        那么抛出
异常。
             4,autodetect 通过bean类的自省机制(introspection)来决定是
                                       使用
constructor还是byType方式进行自动装配。
                                       如果发现默认的
构造器,那么将使用byType方式,否则采用 
                                      
constructor。

首先让我们来看看byName是怎么进行装配的。(假设有Boss类)
                        public class Boss(){
                               private String name;
                               private Car car;
                               省略get/Setter方法
                        
                        }
在配置中我们采用byName的自动装配方式:
       <bean id="car" class="com.test.auto.Car">
               <property name="brand" value="aaa" />
               <property name="price" value="1256" />
       </bean>
      <bean id="boss"  class="com.test.auto.Boss" autowire="byName">
                <property name="name" value="Tom" />
      </bean>  

如果未采用自动装配机制,在定义Bean的时候我们需要显式的通过property来进行配置,但通过autowire="byName"我们可以按命名自动装配,但如果通过名字进行装配的属性和目标Bean的属性类型不匹配,将回抛出ClassCastException。

当然我们同样可以采用byType的方式来进行Bean属性的装配,首先让我们来看看Spring神奇的byType的装配标准。它是以什么方式来衡量类型是否匹配的呢?(首先有A、B两个类)

如果A和B是相同类型:匹配!
A是B的子类:匹配!
A实现了B的接口:匹配!
所有的类都按类型匹配Object,所有的异常都按类型匹配于Exception;所有的List实现类都按类型匹配于List类。

那么Bean采用byType进行自动装配的时候,IOC容器中存在多个类型匹配的Bean应该怎么办呢?Spring当然是不会知道选择哪个作为匹配对象的,所以它会抛出Unsatisfied-DependecncyException。

当然Spring自动装配还有很多问题需要研究和解决,写累了休息下,改天再聊。

               

 
 

(阅读 )   评论数(:1)
评论】 【收藏】
评论:共1条
最好能写个完整的例子,呵呵!
评论人: 天一     评论时间: 2007-12-18 00:20:04

发表评论:
发表人:
评论: 
    
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率