最近看了《spring从入门到精通》看到接口注入、getter\setter、还有构造器注入不明白他们的区别和在实际项目中应用的程度、谁有这几种注入的源代码例子吗?还能解释下在项目中的应用呢?

解决方案 »

  1.   

    getter\setter、 就是属性注入,一个属性提供setter方法,就可一注入了
    构造方法注入,就是你提供有参的构造方法,通过参数注入//类ReCalculateIndexName有个recalculateIndexNameMap属性,提供了setter方法,注入一个map
     <bean name="reCalculateIndexName" 
          class="com.huawei.datavoice.common.ReCalculateIndexName">
             
              <property name="recalculateIndexNameMap">
                  <map>
                     <entry key = "index.version.defect.dts">
                          <value>index.version.defect.discover.suggestion.Bversion</value>
                     </entry>
                     <entry key = "index.version.defect.jira">
                          <value>index.version.defect.jira.total.number.critical.daily</value>
                     </entry>
                     <entry key = "index.version.demand.story">
                          <value>index.version.demand.jira.story.total.number.critical.daily</value>
                     </entry>
                  </map>
              </property>
         </bean>
    //构造方法注入DefaultSpringSecurityContextSource这个类有个有参的构造方法,参数是个字符串
    <bean id="contextSource"
    class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="ldap://xxxx" />
    </bean>
      

  2.   

    一般有接口注入、getter\setter、还有构造器注入,当时spring只支持getter\setter、还有构造器注入,例子如楼上,
    一般在项目很少用到构造器注入,大部分都是getter/setter
      

  3.   


    三楼的解答很详细了已经,另外:
    1、构造方法注入的好处是在new对象的时候,就可以得到一个完整的对象,有利于对象的完整性。另一方面,对象一旦new,由于不能提供set方法,所以该对象被注入的参数不可更改,这点即有利又有弊。
    属性注入由于提供了set方法,可以在new出对象后,对要注入的值做修改。
    2、当要注入的参数的数量比较多且变化较多时,不利于使用,一个原因是构造方法的参数太大,不利于维护,另一个原因是要注入的参数要发生变化时,改动量比较大,不利于扩展。属性注入正好可以解决这点。
    3、日常开发使用较多的还是属性注入
      

  4.   

    经常用的是set注入,其他几个可以不用深究,