spring讲解4–依赖注入详解(DI)
依赖注入的三种方式:
—属性注入(set方法)
—构造器注入
—工厂方法注入(很少使用,不推荐)
!!!!!
这里面特别提醒一下属性和成员变量的区别:
private String brand; //brand为成员变量
public String getBrand() { // set后面的单词小写,brand就表示属性.
return brand;
}
(1)通过set方法进行注入
applicationContext.xml
<bean id="car" class="com.atspring.beans.Car">
<property name="brand" value="audi"></property>
<property name="crop" value="yiqi"></property>
<property name="price" value="22000"></property>
</bean>
(2)使用构造器进行注入
<bean id="car1" class="com.atspring.beans.Car">
<constructor-arg value="aodi"></constructor-arg>
<constructor-arg value="huachen"></constructor-arg>
<constructor-arg value="1000"></constructor-arg>
</bean>
其中car构造器使用时,不适用name指定构造器中的属性值。默认按照构造函数中的属性排列顺序进行赋值。可以使用
index关键词指定赋值的属性。
<bean id="car1" class="com.atspring.beans.Car">
<constructor-arg value="aodi" index="0"></constructor-arg>
<constructor-arg value="huachen" index="1"></constructor-arg>
<constructor-arg value="1000" index="2"></constructor-arg>
</bean>
当出现两个构造器的时候,此时有时候会出现异常,如下。
public Car(String brand, String crop, double price) {
super();
this.brand = brand;
this.crop = crop;
this.price = price;
}
public Car(String brand, String crop, int number) {
super();
this.brand = brand;
this.crop = crop;
this.number = number;
}
出现这种情况,在进行配置文件书写的时候,可以指定属性的类型,使用type关键字指定属性类型,这样子可以排除异常。
<bean id="car1" class="com.atspring.beans.Car">
<constructor-arg value="aodi" index="0" type="String"></constructor-arg>
<constructor-arg value="huachen" index="1"></constructor-arg>
<constructor-arg value="1000" index="2"></constructor-arg>
</bean>
在加上使用其他的方式进行字符串的表达:
<value><![CDATA[品牌《的说法是》]]></value>
使用 <![CDATA[~~~~]]> 中间可以任何字符,都会被当做字符串进行处理。
(3)注入其他的bean (ref)
<bean id="person" class="com.atspring.beans.Person">
<property name="name" value="limng"></property>
<property name="age" value="10"></property>
<!-- <property name="car" ref="car1"></property> 第一种方式,ref 后面是bean的id -->
<property name="car">
<bean class="com.atspring.beans.Car"> <!-- 第二种方式进行bean的初始化,这种是内部bean的实现方式>
<constructor-arg index="0" type="String">
<value><![CDATA[品牌《的说法是》]]></value>
</constructor-arg>
<constructor-arg value="huachen" index="1"></constructor-arg>
<constructor-arg value="1000" index="2"></constructor-arg>
</bean>
</property>
</bean>
(4)注入其他的数据类型(List array set)
<bean id="personList" class="com.atspring.beans.PersonList">
<property name="age" value="10"></property>
<property name="name" value="liuwu"></property>
<property name="cars">
<list> <!-- list代码块-->
<ref bean="car"></ref>
<ref bean="car1"></ref>
<bean id=" " class="com.atspring.beans.Car">
<constructor-arg index="0" type="String">
<value><![CDATA[品牌《的说法是》]]></value>
</constructor-arg>
<constructor-arg value="huachen" index="1"></constructor-arg>
<constructor-arg value="1000" index="2"></constructor-arg>
</bean>
</list>
<set></set> <!-- set代码块-->
<array></array> <!-- array代码块-->
</property>
</bean>
(4)map类型注入 (对于map类的数据,使用entry进行表示)

上面实现中使用的类
创建person对象进行注入其他bean的验证
package com.atspring.beans;
public class Person {
private String name;
private int age;
private Car car;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age, Car car) {
super();
this.name = name;
this.age = age;
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
创建Car类进行验证:
**car.java**
package com.atspring.beans;
public class Car {
private String brand;
private String crop;
private double price;
public Car() {
super();
// TODO Auto-generated constructor stub
}
public Car(String brand, String crop, double price) {
super();
this.brand = brand;
this.crop = crop;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getCrop() {
return crop;
}
public void setCrop(String crop) {
this.crop = crop;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", crop=" + crop + ", price=" + price
+ "]";
}
}

本文深入讲解Spring框架中的依赖注入(DI)概念,包括属性注入、构造器注入和工厂方法注入等三种主要方式,并通过实例演示如何在XML配置文件中进行注入,涵盖了基本数据类型、复杂类型如Bean、List、Map及Set的注入方法。
1052

被折叠的 条评论
为什么被折叠?



