Spring支持的注入方式共有四种:set注入、构造注入、静态工厂注入、实例化工厂.
以下列举常用的两个注入的方式:
一:set注入
1.创建一个UserDao的类
package com.shuaiwen.dao;
public class UserDao {
public void saveDao(){
System.out.println("userDao层的saveDao...");
}
}
2.创建一个service,通过创建UserService的getter方法,把UserDao对象作为参数传入
package com.shuaiwen.service;
import com.shuaiwen.dao.UserDao;
public class UserService {
private UserDao userDao;
public UserService() {
super();
}
//通过set注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void saveService(){
userDao.saveDao();
}
}
3.设置.xml文件
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- set注入 -->
<bean id="userService" class="com.shuaiwen.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="com.shuaiwen.dao.UserDao"></bean>
</beans>
二、构造器注入
1.和上面一样创建那两个class类
package com.shuaiwen.dao;
public class UserDao {
public void saveDao(){
System.out.println("userDao层的saveDao...");
}
}
2.然后创建UserService的带参构造,把userDao注入其中。
package com.shuaiwen.service;
import com.shuaiwen.dao.UserDao;
public class UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public UserService() {
super();
// TODO Auto-generated constructor stub
}
//创建带参构造
public UserService(UserDao userDao) {
super();
this.userDao = userDao;
}
public void saveService(){
userDao.saveDao();
}
}
3.配置.xml文件
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 构造器注入 -->
<!-- <bean id="userService" class="com.shuaiwen.service.UserService">
<constructor-arg ref="userDao"></constructor-arg>
</bean>
<bean id="userDao" class="com.shuaiwen.dao.UserDao"></bean> -->
</beans>
还有一个问题:
- A类中注入了B类对象
- B类中注入了A类对象
循环依赖——在采用构造器注入的方式配置bean时,很有可能会产生循环依赖的情况
对于此问题,一个可能的解决方法就是修改源代码,将某些构造器注入改为setter注入。另一个解决方法就是完全放弃构造器注入,只使用setter注入。