Spring IoC容器--Bean的装配

一 Bean的依赖注入

    (1)属性依赖注入

               属性依赖注入要求Bean类提供一个默认的构造函数,并为需要注入的属性提供对应的setter方法,Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用setter方法注入属性值。

               如下例子,提供了默认构造函数和属性的setter方法:        

      public class Car {
          private String brand;
          private String color;
          private int maxspeed;

          public String getBrand() {
 	     return brand;
          }
          public void setBrand(String brand) {
 	     this.brand = brand;
   	  }
          public String getColor() {
	     return color;
    	  }
          public void setColor(String color) {
             this.color = color;
          }
          public int getMaxspeed() {
             return maxspeed;
          }
          public void setMaxspeed(int maxspeed) {
              this.maxspeed = maxspeed;
          }
      }

               在spring配置文件中的配置片段:

       <bean id="car" class="com.smart.domain.Car">
             <property name="brand"><value>红旗</value></property>
             <property name="color"><value>红</value></property>
             <property name="maxspeed"><value>200</value></property>
       </bean>

            综上所述,Bean的每一个属性对应一个<property>标签,name为属性的名称.需要注意的是,spring只会检查Bean中是否有对应的Setter方法,至于Bean中是否有对应的属性变量则不做要求.但是在一般情况下,还是按照约定俗成的方式在Bean中提供同名的属性变量.

       (2) 构造函数注入

             构造函数注入保证一些必要的属性在Bean实例化时就得到设置,并且确保Bean实例化后则可以使用,其中构造函数注入又可以分为按类型匹配入参、按索引匹配入参、联合使用类型和索引匹配入参这三种.构造函数注入使用前提是必须提供带参的构造函数.

             1)按类型匹配入参       

       public class Car {
           private String brand;
           private String color;
           private int maxspeed;
           public Car1(String brand,int maxspeed){
               this.brand=brand;
               this.maxspeed=maxspeed;
           }
       }

             Spring中的配置文件片段:

      <bean id="car2" class="com.smart.domain.Car">
            <constructor-arg type="java.lang.String"><value>红旗</value></constructor-arg>
            <constructor-arg type="int" ><value>20000</value></constructor-arg>
      </bean>    

            2)按索引匹配入参

                试想,如果构造函数中的入参全是String类型,那么这时候我们怎么对应入参的顺序呢?这时候,我们就需要使用索引匹配入参了.    

      public class Car{
        private String brand;
        private String color;
        private int maxspeed;
        public Car1(String brand,String color,int maxspeed){
            this.brand=brand;
            this.color=color;
            this.maxspeed=maxspeed;
        }
     }

            Spring配置文件中的配置片段为:       

     <bean id="car2" class="com.smart.domain.Car">
  	<constructor-arg  index="0"><value>红旗</value></constructor-arg>
  	<constructor-arg  index="1"><value>黑色</value></constructor-arg>
 	 <constructor-arg  index="2"><value>20000</value></constructor-arg>
     </bean>

              3)联合使用类型和索引匹配入参

                 如果一个Bean类拥有两个重载的构造函数,他们都拥有三个入参,如果仅用类型匹配或者索引匹配都不能满足要求。如下所示:           

public class Car1 {
	private String brand;
	private String color;
	private int maxspeed;
	private double corp;
	public Car1(String brand,String color,int maxspeed){
		this.brand=brand;
		this.color=color;
		this.maxspeed=maxspeed;
	}
	public Car1(String brand,String color,double crop){
		this.brand=brand;
		this.color=color;
		this.corp=crop;
	}
}

        Spring配置文件中德配置片段为:

        <bean id="car2" class="com.smart.domain.Car">
              <constructor-arg type="java.lang.String" index="0"><value>红旗</value></constructor-arg>
              <constructor-arg type="java.lang.String" index="1"><value>黑色</value></constructor-arg>
              <constructor-arg type="int" index="2"><value>20000</value></constructor-arg>
        </bean>

    1.        未完待续!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值