Spring属性注入

1.根据属性的set方法注入

①.Bean对象的属性必须要有对应的set方法,get方法可以没有


2.构造器注入

①.以下两种方式是等效的,可以指定是构造器的第几个参数

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg value="宝马"></constructor-arg>
<constructor-arg value="1000000"></constructor-arg>
<constructor-arg value="武汉"></constructor-arg>
<constructor-arg value="300"></constructor-arg>
</bean>

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg value="宝马" index="0"></constructor-arg>
<constructor-arg value="1000000" index="1"></constructor-arg>
<constructor-arg value="武汉" index="2"></constructor-arg>
<constructor-arg value="300" index="3"></constructor-arg>
</bean>


②.构造器匹配问题

public Car(String brand, double maxSpeed ,String location) 
{
this.brand = brand;
this.location = location;
this.maxSpeed = maxSpeed;
}

public Car(String brand, int price, String location) 
{
this.brand = brand;
this.price = price;
this.location = location;
}

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg value="宝马"></constructor-arg>
<constructor-arg value="500000"></constructor-arg>
<constructor-arg value="上海"></constructor-arg>
</bean>

此时原则上讲这种配置对于以上两个构造器都配置,但实际上它会匹配上第二个构造器,这跟这两个构造器出现的先后顺序有关,会匹配到后面的那个构造器。

为了能更好的匹配上,我们可以使用type属性来区分:

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg value="宝马"></constructor-arg>
<constructor-arg value="500000" type="double"></constructor-arg>
<constructor-arg value="上海"></constructor-arg>
</bean>


3.Bean属性字面值注入还可以使用<value/>子标签,以下两种方式是等效的

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg value="宝马"></constructor-arg>
<constructor-arg value="500000" type="double"></constructor-arg>
<constructor-arg value="上海"></constructor-arg>
</bean>

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg>
<value>宝马</value>
</constructor-arg>
<constructor-arg type="double">
<value>5000</value>
</constructor-arg>
<constructor-arg>
<value>上海</value>
</constructor-arg>
</bean>


4.此时注入的值为"宝马"和"上海",引号被原样输出了

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg>
<value>"宝马"</value>
</constructor-arg>
<constructor-arg type="double">
<value>5000</value>
</constructor-arg>
<constructor-arg>
<value>"上海"</value>
</constructor-arg>
</bean>

5.如果字面值有特殊字符,使用<![CDATA[属性值]]>,此时注入的值为<上海**>

<bean id="car1" class="com.ly.spring.model.Car">
<constructor-arg>
<value>"宝马"</value>
</constructor-arg>
<constructor-arg type="double">
<value>5000</value>
</constructor-arg>
<constructor-arg>
<value><![CDATA[<上海**>]]></value>
</constructor-arg>
</bean>


6.Bean的引用,以下两种方式等效

<bean id="person" class="com.ly.spring.model.Person">
<property name="age" value="26"></property>
<property name="name" value="tom"></property>
<property name="car" ref="car1"></property>
</bean>

<bean id="person" class="com.ly.spring.model.Person">
<property name="age" value="26"></property>
<property name="name" value="tom"></property>
<property name="car">
<ref bean="car1"/>
</property>
</bean>


7.内部Bean不可以被引用,也不可以通过getBean方法来获取

<bean id="person" class="com.ly.spring.model.Person">
<property name="age" value="20"></property>
<property name="name" value="tom"></property>
<property name="car">
<bean id="car2" class="com.ly.spring.model.Car">
<constructor-arg value="宝马"></constructor-arg>
<constructor-arg value="5000" type="double"></constructor-arg>
<constructor-arg value="上海"></constructor-arg>
</bean>
</property>
</bean>


8.级联属性注入,必须先实例化car(也可以在Person的构造器中实例化),而且Car这个类里面对于属性brand必须要有set方法

<bean id="person" class="com.ly.spring.model.Person">
<property name="age" value="25"></property>
<property name="name" value="Tom"></property>
<property name="car" ref="car1"></property>
<property name="car.brand" value="奥迪"></property>
</bean>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值