spring bean 注入

概念

http://developer.51cto.com/art/200610/33311.htm

http://kb.cnblogs.com/page/45266/

https://www.chkui.com/article/spring/spring_core_stereotype_component_and_bean_scan

https://www.chkui.com/article/spring/spring_core_design_pattern_and_ioc

构造器注入

Value:参数值,通常是基本类型和 type或者index配合使用。

Name:构造函数中参数的名字

Ref:引用其他Spring管理的对象

Type:参数的类型,值为基本类型或者完全限定的类名。

   <constructor-arg index="..." value="..." name="..." ref="..." type="..."></constructor-arg>

使用index,可以不按顺序
采用type进行限定,使用正确的构造器型
使用name 有一些限制,限制在于必须以debug的形式编译类,因为只有这样,才可以保留构造函数中参数的变量名。
或者使用在构造函数中使用注解 @ConstructorProperties

@ConstructorProperties({"years", "ultimateAnswer"})
public ExampleBean(int years, String ultimateAnswer) {
this.years = years;
this.ultimateAnswer = ultimateAnswer;
}

静态工厂方法注入
实例工厂方法注入

设值注入

   property 标签有三个属性 name  ref  和 value
   其中 name是将要被注入的属性的名称。
   ref 是引用被spring管理的对象

propertyEditor 转换value的值也可以是 spring表达式 spel

类型为java.util.properties可以采用类似下面的配置:

<!-- typed as a java.util.Properties -->
<property name="properties">
    <value>
        jdbc.driver.className=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql://localhost:3306/mydb
    </value>
</property>

集合

<!-- 集合的注入,包括 set list map properties -->
    <bean id="fruitSet" class="com.test.wdid.FruitCollection">
       <property name="fruits">
           <!-- 集合 set标签,可以定义内部bean,引用其他bean -->
           <set>
              <bean class="com.test.wdi.Fruit">
                  <property name="apple" ref="a">
                  </property>
                  <property name="banana" ref="b"></property>
              </bean>
              <ref bean="f1" />
              <ref bean="f2" />
              <ref bean="f3" />
              <ref bean="f4" />
              <ref bean="f5a" />
              <ref bean="f5b" />
              <ref bean="f5c" />
           </set>
       </property>
 
       <property name="fruitList">
                   <!--  list标签,可以定义内部bean,引用其他bean -->
           <list>
              <bean class="com.test.wdi.Fruit">
                  <property name="apple" ref="a">
                  </property>
                  <property name="banana" ref="b"></property>
              </bean>
              <ref bean="f1" />
              <ref bean="f2" />
              <ref bean="f3" />
              <ref bean="f4" />
              <ref bean="f5a" />
              <ref bean="f5b" />
              <ref bean="f5c" />
           </list>
       </property>
 
       <property name="fruitMap">
           <!--  map标签  定义enrty 子标签,属性有  key value key-ref value-ref ,意思很明显-->
           <map>
              <entry key="f1" value-ref="f1" ></entry>
              <entry key="f2" value-ref="f2"></entry>
              <entry key="f3" value-ref="f3"></entry>
              <entry key="f4" value-ref="f4"></entry>
           </map>
       </property>
 
       <property name="ppp">
          
           <!--  props标签  定义prop 子标签,本质是字符串类型的键值对-->
          
           <props>
              <prop key="1">t1</prop>
              <prop key="2">t2</prop>
              <prop key="3">t3</prop>
              <prop key="4">t4</prop>
           </props>
       </property>
      <property name="properties">
        <value>
            jdbc.driver.className=com.mysql.jdbc.Driver
            jdbc.url=jdbc:mysql://localhost:3306/mydb
        </value>
    </property>
    </bean>

Null和空串

<!-- 空串和null -->
    <bean id="exam5Null" class="com.test.wdi.ExampleBean">
        <property name="years" value="1111"></property>
       <property name="ultimateAnswer">
           <null/>
       </property>
       <property name="test" value="true"></property>
    </bean>
   
    <bean id="exam5Empty" class="com.test.wdi.ExampleBean">
         <property name="years" value="1111"></property>
       <property name="ultimateAnswer" value="">
       </property>
       <property name="test" value="true"></property>
    </bean>

https://blog.csdn.net/windsunmoon/article/details/44019579

posted @ 2018-11-21 11:27  antball  阅读(145)  评论(0编辑  收藏  举报