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注入。