Spring04:依赖注入(DI)
概念
依赖注入(Dependency Injection,DI)。
依赖 : 指Bean对象的创建依赖于容器。
注入 : 指Bean对象所依赖的资源,由容器来设置和装配 。
1、构造器注入
构造器注入可根据参数下标,参数名称,参数类型三种方式。
<bean id="user" class="com.kuang.pojo.Person">
<constructor-arg name="username" value="tom"></constructor-arg>
</bean>
2、Set 注入
要求被注入的属性,必须有set方法
创建测试类:
Address.java
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Student.java
package com.kuang.pojo;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Student {
private String name;
private Address address;
private String[] books;
private List<String> hobbys;
private Map<String,String> card;
private Set<String> games;
private String wife;
private Properties info;
public void setName(String name) {
this.name = name;
}
public void setAddress(Address address) {
this.address = address;
}
public void setBooks(String[] books) {
this.books = books;
}
public void setHobbys(List<String> hobbys) {
this.hobbys = hobbys;
}
public void setCard(Map<String, String> card) {
this.card = card;
}
public void setGames(Set<String> games) {
this.games = games;
}
public void setWife(String wife) {
this.wife = wife;
}
public void setInfo(Properties info) {
this.info = info;
}
}
1、常量注入
<bean id="student" class="com.kuang.pojo.Student">
<property name="name" value="小明"/>
</bean>
2、bean注入
<bean id="addr" class="com.kuang.pojo.Address">
<property name="address" value="重庆"/>
</bean>
<bean id="student" class="com.kuang.pojo.Student">
<property name="address" ref="addr"/>
</bean>
3、数组注入
<bean id="student" class="com.kuang.pojo.Student">
<property name="name" value="小明"/>
<property name="address" ref="addr"/>
<property name="books">
<array>
<value>西游记</value>
<value>红楼梦</value>
<value>水浒传</value>
</array>
</property>
</bean>
4、List注入
<property name="hobbys">
<list>
<value>听歌</value>
<value>看电影</value>
<value>爬山</value>
</list>
</property>
5、Map注入
<property name="card">
<map>
<entry key="中国邮政" value="456456456465456"/>
<entry key="建设" value="1456682255511"/>
</map>
</property>
6、set注入
<property name="games">
<set>
<value>LOL</value>
<value>BOB</value>
<value>COC</value>
</set>
</property>
7、Null注入
<property name="wife"><null/></property>
8、Properties注入
<property name="info">
<props>
<prop key="学号">20190604</prop>
<prop key="性别">男</prop>
<prop key="姓名">小明</prop>
</props>
</property>
3、p命名空间和c命名空间注入
注意:命名空间注入需要在头文件中导入约束。
User.java :
public class User {
private String name;
private int age;
public User(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
P命名空间注入
P(属性: properties)命名空间,注入的属性依然需要设置set方法
<!--需要导入约束: xmlns:p="http://www.springframework.org/schema/p" -->
<bean id="user" class="com.kuang.pojo.User" p:name="狂神" p:age="18"/>
c 命名空间注入
c(构造: Constructor)命名空间
<!--需要导入约束: xmlns:c="http://www.springframework.org/schema/c" -->
<bean id="user" class="com.kuang.pojo.User" c:name="狂神" c:age="18"/>
总结:P命名空间注入其实就是set方法注入;c命名空间注入就是所谓的构造器注入
spring学习

浙公网安备 33010602011771号