依賴注入的方法
通過構造器注入
官方文檔:
通過有參構造器注入。
使用:
假設有一個人,有一條狗和一隻貓,狗有名字和年齡。
package com.lbl.pojo;
public class User {
private Cat cat;
private Dog dog;
public User(Cat cat, Dog dog) {
this.cat = cat;
this.dog = dog;
}
}
package com.lbl.pojo;
public class Cat {
}
package com.lbl.pojo;
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
在配置文件中通過構造器注入:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="User" class="com.lbl.pojo.User">
<constructor-arg index="1" ref="dog"/>
<constructor-arg index="0" ref="cat"/>
</bean>
<bean id="dog" class="com.lbl.pojo.Dog">
<constructor-arg type="int" value="12"/>
<constructor-arg type="java.lang.String" value="wangcai"/>
</bean>
<bean id="cat" class="com.lbl.pojo.Cat"/>
</beans>
User的注入:通過index來匹配,也可以不加
Dog的注入:通過類型來匹配,必須寫全限定名
通過Set方法注入
官方文檔:
假設我們有一個人,有一大堆基本屬性和一個地址類屬性:
package com.lbl.pojo;
import java.util.*;
public class User {
private String name;
private Address address;
private List<String> userlist;
private Map<String, String> usermap;
private Set<String> userset;
private String[] userString;
private Properties info;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public List<String> getUserlist() {
return userlist;
}
public void setUserlist(List<String> userlist) {
this.userlist = userlist;
}
public Map<String, String> getUsermap() {
return usermap;
}
public void setUsermap(Map<String, String> usermap) {
this.usermap = usermap;
}
public Set<String> getUserset() {
return userset;
}
public void setUserset(Set<String> userset) {
this.userset = userset;
}
public String[] getUserString() {
return userString;
}
public void setUserString(String[] userString) {
this.userString = userString;
}
public Properties getInfo() {
return info;
}
public void setInfo(Properties info) {
this.info = info;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", address=" + address.toString() +
", userlist=" + userlist +
", usermap=" + usermap +
", userset=" + userset +
", userString=" + Arrays.toString(userString) +
", info=" + info +
'}';
}
}
地址類:
package com.lbl.pojo;
public class Address {
private String add;
private Integer num;
public String getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
return "Address{" +
"add='" + add + '\'' +
", num=" + num +
'}';
}
}
在配置文件中使用Set方法注入,包含各種集合類的注入方式:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="address" class="com.lbl.pojo.Address">
<property name="add" value="AK47"></property>
<property name="num" value="12312321"></property>
</bean>
<bean id="user" class="com.lbl.pojo.User">
<property name="address" ref="address"/>
<property name="name" value="asdsd"/>
<property name="userlist">
<list>
<value>asdasdf</value>
<value>sarasd</value>
</list>
</property>
<property name="usermap">
<map>
<entry key="key1" value="v1"/>
<entry key="key2" value="v2"/>
</map>
</property>
<property name="userString" value="KSDS"/>
<property name="userset">
<set>
<value>sasdasd</value>
<value>sdasdas</value>
</set>
</property>
<property name="info">
<props>
<prop key="username">sda</prop>
<prop key="password">123214</prop>
</props>
</property>
</bean>
</beans>
C命名空間和P命名空間注入
C-namespace:就是構造器注入constructor-arg的縮寫。
P-namespace:就是屬性注入property的縮寫。
P-namespace:
注意要事先引入依賴:
xmlns:p="http://www.springframework.org/schema/p"
由
<bean id="address" class="com.lbl.pojo.Address">
<property name="add" value="AK47"></property>
<property name="num" value="12312321"></property>
</bean>
變爲:
<bean id="address" class="com.lbl.pojo.Address" p:add="AK47" p:num="1234"/>
C-namespace:
注意要事先引入依賴:
xmlns:c="http://www.springframework.org/schema/c"
由
<bean id="dog" class="com.lbl.pojo.Dog">
<constructor-arg type="int" value="12"/>
<constructor-arg type="java.lang.String" value="wangcai"/>
</bean>
變爲:
<bean id="dog" class="com.lbl.pojo.Dog" c:name="wangcai" c:age="12"/>