三、Spring-依赖注入(DI)
一、Bean的依赖注入方式
1.1 构造方法注入
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
<bean id="userDao" class="xxx.UserDaoImpl"/>
<bean id="userService" class="xxx.UserServiceImpl">
<!-- value 注入普通属性 ref 注入引用属性 -->
<constructor-arg name="userDao" ref="userDao"/>
</bean>
1.2 set方法注入
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
<bean id="userDao" class="xxx.UserDaoImpl"/>
<bean id="userService" class="xxx.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
1.3 P命名空间注入
- P命名空间注入本质上也是set注入,但是比set方便
1.3.1 引入P命名空间
xmlns:p="http://www.springframework.org/schema/p"
1.3.2 注入方式
<bean id="userDao" class="xxx.UserDaoImpl"/>
<bean id="userService" class="xxx.UserServiceImpl" p:userDao-ref="userDao"/>
二、Bean以来注入的数据类型
2.1 普通数据类型
public class User {
private String username;
private String age;
public void setUsername(String username) {
this.username = username;
}
public void setAge(String age) {
this.age = age;
}
}
<bean id="user" class="xxx.User">
<property name="username" value="jack"/>
<property name="age" value="18"/>
</bean>
2.2 引用数据类型
同上
2.3 集合数据类型
2.3.1 List集合
public class UserDaoImpl implements UserDao {
private List<Object> list;
public void save() {
System.out.println(list);
}
}
<bean id="user" class="xxx.User">
<property name="username" value="jack"/>
<property name="age" value="18"/>
</bean>
<bean id="userDao" class="xxx.UserDaoImpl">
<property name="list">
<list>
<value>aaa</value>
<ref bean="user"></ref>
</list>
</property>
</bean>
2.3.2 Set集合
public class UserDaoImpl implements UserDao {
private Set<Object> set;
public void setSet(Set<Object> set) {
this.set = set;
}
public void save() {
System.out.println(set);
}
}
<bean id="user" class="xxx.User">
<property name="username" value="jack"/>
<property name="age" value="18"/>
</bean>
<bean id="userDao" class="xxx.UserDaoImpl">
<property name="set">
<list>
<value>bbb</value>
<ref bean="user"></ref>
</list>
</property>
</bean>
2.3.3 Array数组
public class UserDaoImpl implements UserDao {
private Object[] array;
public void setArray(Object[] array) {
this.array = array;
}
public void save() {
System.out.println(Arrays.toString(array));
}
}
<bean id="user" class="xxx.User">
<property name="username" value="jack"/>
<property name="age" value="18"/>
</bean>
<bean id="userDao" class="xxx.UserDaoImpl">
<property name="array">
<array>
<value>ccc</value>
<ref bean="user"></ref>
</array>
</property>
</bean>
2.3.4 Map集合
public class UserDaoImpl implements UserDao {
private Map<String, Object> map;
public void setMap(Map<String, Object> map) {
this.map = map;
}
public void save() {
System.out.println(map);
}
}
<bean id="user" class="xxx.User">
<property name="username" value="jack"/>
<property name="age" value="18"/>
</bean>
<bean id="userDao" class="xxx.UserDaoImpl">
<property name="map">
<map>
<entry key="k1" value="ddd"/>
<entry key="k2" value-ref="user"></entry>
</map>
</property>
</bean>
2.3.5 Properties
public class UserDaoImpl implements UserDao {
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
public void save() {
System.out.println(properties);
}
}
<bean id="userDao" class="xxx.UserDaoImpl">
<property name="properties">
<props>
<prop key="k1">v1</prop>
<prop key="k2">v2</prop>
<prop key="k3">v3</prop>
</props>
</property>
</bean>