Spring Ioc注入的四種方式

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章