美文网首页
spring学习(4)-注入方式

spring学习(4)-注入方式

作者: 梦落迹南天 | 来源:发表于2018-07-06 10:44 被阅读0次

构造注入

使用方式

构造注入在生成对象使用构造方法的时候会调用
xml配置的主要写法为<construct-arg name... value>如下 :

<bean name="person" class="com.woder.spring.pojo.Person">
    <constructor-arg name="name2" value="jay" ></constructor-arg>
    <constructor-arg name="age2" value="12"></constructor-arg>
</bean> 

注意! name对应的名字一定是构造函数中的变量参数的名字

参数顺序重载

由于构造注入与顺序无关,当构造函数重载时可以通过``indextype```选择构造函数,如当有以下两个构造函数的时候:

//第一个构造函数
public Person(String name2, Integer age2){
              ...
}

//第二个构造函数
public Person(String age2, Integer name2){
              ...
}

使用以下配置将会选择第二个构造函数

<constructor-arg name="name2" value="jay" index="1" ></constructor-arg>
<constructor-arg name="age2" value="12" index="0" ></constructor-arg>

参数类型重载

有时候构造函数的参数会出现名字相同,但是类型不同的情况,可以通过关键字type指定重载的构造函数,如下:

//第一个构造函数
public Person(String name2, String age2){
              ...
}

//第二个构造函数
public Person(String name2, Integer name2){
              ...
}

当使用如下配置的时候将会选择第二个构造函数

<constructor-arg name="name2" value="jay" index="0" ></constructor-arg>
<constructor-arg name="age2" value="12" index="1" type="java.lang.Integer" ></constructor-arg>

set注入

set注入方式,bean创建完对象之后会马上调用set方法去设置不同成员的属性,所以一定要有set方法:
xml 配置的主要写法为<property name... value....>

<bean name="person" class="com.woder.spring.pojo.Person">
        <!-- property 标明这是一个set注入-->
        <!-- name     标明要修改的属性值-->
        <!-- value      标明要改成的值-->
        <property name="name" value="tom"></property>
        <property name="age" value="19"></property>
</bean>

当需要传递对象进行set注入的时候,需要用到关键词ref

    <bean name="personCar1" class="com.woder.spring.pojo.Car">
    </bean>
    
    <bean name="person" class="com.woder.spring.pojo.Person">
        <property name="personCar" ref="personCar1"></property>
    </bean>

名称空间注入

名称空间是一种等价于set注入的注入方式,使用前需要现在配置文件上创建名称空间

<beans
    xmlns:p="http://www.springframework.org/schema/p">
</beans>

下列两种注入方式相等

<bean name="person" class="com.woder.spring.pojo.Person"
            p:name="tom" 
            p:age="18"
            p:personCar-ref="personCar1">
</bean>
<bean name="person" class="com.woder.spring.pojo.Person">
        <property name="name" value="tom"></property>
        <property name="age" value="19"></property>
        <property name="personCar" ref="personCar1"></property>
</bean>

表达式注入

当需要使用另一个bean对象中的属性值作为注入的时候就需要用到表达式了#{},如下

<bean name="person1" class="com.woder.spring.pojo.Person"
            p:name="tom" 
            p:age="18"
            p:personCar-ref="personCar1">
</bean>

<bean name="person2" class="com.woder.spring.pojo.Person"
            p:name="#{person1.name}" 
            p:age="#{person1.age}"
            p:personCar-ref="#{person1.personCar}">
</bean>

相关文章

网友评论

      本文标题:spring学习(4)-注入方式

      本文链接:https://www.haomeiwen.com/subject/hxkyuftx.html