依赖注入的方法
通过构造器注入
官方文档:
通过有参构造器注入。
使用:
假设有一个人,有一条狗和一只猫,狗有名字和年龄。
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"/>