Spring之DI属性注入实现方式

本文详细介绍了Spring框架中的依赖注入方式,包括构造方法注入、set方法注入、p命名空间注入及SpEL表达式注入等。每种注入方式都通过具体实例进行了解释说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、构造方法注入

1.普通属性(constructor-arg name value (index  type可选))

index:构造函数的参数索引,如 index="0"  构造函数第一个参数

type:构造函数的参数类型,如 type="java.lang.String"构造参数类型为String类型

public class Car {
	private String name;
	private Double price;
	
	public Car(String name, Double price) {
		super();
		this.name = name;
		this.price = price;
	}
	
}
	<!-- 构造方法的方式 -->
	<bean id="car" class="com.mark.spring.demo.Car">
		<constructor-arg name="name" value="BWM"/>
		<constructor-arg name="price" value="8888"/>
	</bean>

 2.对象类型属性(constructor-arg name ref(index  type可选))

    <!-- 构造方法的方式 -->
    <bean id="user" class="com.mark.spring.demo.User">
        <constructor-arg name="name" value="mark"/>
        <constructor-arg name="car" ref="car"/>
    </bean>
    <!-- 将Car对象配置到容器中 -->
    <bean name="car" class="com.mark.test.Car">
        <property name="name" value="奔驰"></property>
        <property name="color" value="黑色"></property>
    </bean>

 二、set方法注入

1.普通属性(property name value)

public class Car2 {
	private String name;
	private Double price;
	public void setName(String name) {
		this.name = name;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	
}
    <!-- set方法的方式 -->
    <bean id="car" class="com.mark.spring.demo.Car">
        <property name="name" value="BWM"/>
        <property name="price" value="8888"/>
    </bean>

2.对象类型属性(property name ref)

     public class User {
	     private String name;
	     private Integer age;
	 
	     private Car car;
             //...
    }
	<bean name="user" class="com.mark.test.User">
		<!-- 使用property标签注入属性值 name:类属性名称 value属性:往属性中注入的值 -->
		<property name="name" value="mark"></property>
		<property name="age" value="18"></property>
		<property name="car" ref="car"></property>
	</bean>
		
		<!-- 将Car对象配置到容器中 -->
		<bean name="car" class="com.mark.test.Car">
			<property name="name" value="奔驰"></property>
			<property name="color" value="黑色"></property>
		</bean>

public class CollectionBean {
	private String[] arrs;
	private List<String> list;
	private Set<String> set;
	private Map<String,String> map;
    
    //set...
}

 3.数组、list集合类型属性(property  name| list | value/ref)

<bean id="collectionBean" class="com.mark.spring.demo.CollectionBean">
    <!-- 数组类型或者list集合类型 -->
    <property name="arrs">
        <list>
            <value>tom</value>
            <value>mark</value>
            <value>mario</value>
            <!--<ref/>-->
        </list>
    </property>
</bean>

4.set集合属性(property  name| set | value/ref)

<bean id="collectionBean" class="com.mark.spring.demo.CollectionBean">
    <!-- set集合类型 -->
    <property name="set">
        <set>
            <value>tom</value>
            <value>mark</value>
            <value>mario</value>
            <!--<ref/>-->
        </set>
    </property>
</bean>

5.Map集合属性注入 (property  name| map| entry key/key-ref value/value-ref)

<bean id="collectionBean" class="com.mark.spring.demo.CollectionBean">
    <!-- map集合类型 -->
    <property name="map">
        <map>
            <entry key="1" value="mark"/>
            <entry key="2" value="tom"/>
            <!-- <entry key-ref="" value-ref=""/> -->
        </map>
    </property>
</bean>

三、p命名空间注入 (需要先引入P命名空间Spring2.5后)

1.普通属性(p:属性名="值")

    <bean name="car" class="com.mark.test.Car" p:name="BWM" p:price="8888"></bean>

2.对象类型属性(p:属性名-ref ="bean名称")

    <bean name="user" class="com.mark.test.User" p:name="lucy" p:age="16" p:car-ref="car"></bean>

四、 SpEL表达式注入(#{SpEL}Spring3.0后)

1.普通属性value=#{值}

    <!-- set方法的方式 -->
    <bean id="car" class="com.mark.spring.demo.Car">
        <property name="name" value="#{'BWM'}"/>
        <property name="price" value="#{8888}"/>
    </bean>

2.对象类型属性value=#{引用对象名称}

	<bean name="user" class="com.mark.test.User">
		<!-- 使用property标签注入属性值 name:类属性名称 value属性:往属性中注入的值 -->
		<property name="name" value="#{'mark'}"></property>
		<property name="age" value="#{18}"></property>
		<property name="car" value="#{car2}"></property>
	</bean>
		
		<!-- 将Car对象配置到容器中 -->
		<bean name="car2" class="com.mark.test.Car">
			<property name="name" value="奔驰"></property>
			<property name="color" value="黑色"></property>
		</bean>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值