文章目录
概述:
在Spring中,对象无需自己查找或创建与其所关联的其它对象。相反,容器负责把需要相互写作的对象引用赋予各个对象。Spring容器负责创建应与程序中的Bean并通过DI(依赖注入)来协调这些对象之间的关系。作为开发人员,只需要告诉Spring要创建哪些Bean并且如何将其装配在一起。对于如何装配Bean,Spring提供了三种装配机制:
- 基于XML文件
- 基于注解
- 自动装配
依赖注入的三种方式:
- 属性注入
- 构造器注入
- 工厂方法注入
有如下类
@Data
@ToString
public class Car {
private String brand;
private String corp;
private int price;
private double maxSpeed;
public Car(String brand, String corp, int price) {
this.brand = brand;
this.corp = corp;
this.price = price;
}
public Car(String brand, String corp, double maxSpeed) {
this.brand = brand;
this.corp = corp;
this.maxSpeed = maxSpeed;
}
}
1. 属性注入
通过setter方法 注入Bean的属性值 元素
使用name 属性指定bean属性名称 value属性或子节点指定属性值
<bean id="helloWorld" class="com.duyu.beans.HelloWorld">
<property name="name" value="Spring"></property>
</bean>
- 构造器注入
<!--通过构造方法来配置bean 的属性-->
<bean id="car" class="com.duyu.beans.Car">
<constructor-arg value="Audi" index="0"></constructor-arg>
<constructor-arg value="ShangHai" index="1"></constructor-arg>
<constructor-arg value="300000" type="double"></constructor-arg>
</bean>
<!--使用构造器注入属性值可以指定参数的位置和参数的类型, 以区分重载的构造器-->
<bean id="car2" class="com.duyu.beans.Car">
<constructor-arg value="Audi" type="java.lang.String"></constructor-arg>
<!--如果字面量包含特殊字符可以使用<![DATA[]]> 包裹起来-->
<!--属性值也可以使用 value 直接进行配置-->
<constructor-arg type="java.lang.String">
<value><![CDATA[<ShangHai^>]]></value>
</constructor-arg>
<constructor-arg type="int">
<value>240</value>
</constructor-arg>
</bean>