spring四种依赖注入方式
平常的java開發中,程序員在某個類中需要依賴其它類的方法,通常是new一個依賴類再調用類實例的方法,這種開發存在的問題是new的類實例不好統一管理。
spring提出了依賴注入的思想,即依賴不由程序員控制,而是通過spring容器幫我們new指定實例并且將實例注入到需要該對象的類中。依賴注入的另一種說法是“控制反轉”,通俗的理解是:平常我們new一個實例,這個實例的控制權是我們程序員,而控制反轉是指new實例工作不由我們程序員來做而是交給spring容器來做。
spring有4種依賴注入方式:
按照實現方式分為兩類:
以下對于4種依賴注入方式,分別使用兩種實現方式來實現
1、Set方法注入
Set方法注入是最簡單、最常用的注入方式。
1.1 注解注入:
package com.obob.dao;public class UserDao {public void login() {System.out.println("login...");} } package com.obob.service; import org.springframework.beans.factory.annotation.Autowired; import com.obob.dao.UserDao;public class UserService {//注解注入(autowire注解默認使用類型注入)@Autowiredprivate UserDao userDao;public void login() {userDao.login();} }1.2 配置文件注入
UserDao定義不變,UserService去掉注解
package com.obob.service; import org.springframework.beans.factory.annotation.Autowired; import com.obob.dao.UserDao;public class UserService {private UserDao userDao;public void login() {userDao.login();} }然后使用配置文件:
<bean name="userService" class="com.obob.service.UserService"><property name="userDao" ref="userDao" /> </bean> <bean name="userDao" class="com.obob.dao.UserDao"></bean>2、構造方法注入
構造方法注入是指帶有參數的構造函數注入
2.1 注解注入:
package com.obob.service;import org.springframework.beans.factory.annotation.Autowired;import com.obob.dao.UserDao;public class UserService {private UserDao userDao;//注解到構造方法處@Autowiredpublic UserService(UserDao userDao) {this.userDao = userDao;}public void login() {userDao.login();} }2.2 配置文件注入
UserService
package com.obob.service;import org.springframework.beans.factory.annotation.Autowired;import com.obob.dao.UserDao;public class UserService {private UserDao userDao;public UserService(UserDao userDao) {this.userDao = userDao;}public void login() {userDao.login();} }配置文件:
<bean name="userService" class="com.obob.service.UserService"><constructor-arg index="0" ref="userDao"></constructor-arg> </bean> <bean name="userDao" class="com.obob.dao.UserDao"></bean>3、靜態工廠的方法注入
靜態工廠顧名思義,就是通過調用靜態工廠的方法來獲取自己需要的對象。
為了使用Spring的依賴注入IOC,我們不直接通過"工程類.靜態方法()"來獲取對象,而是依然通過spring注入的形式獲取:
此種方式無通過注解注入
3.1 配置文件注入
UserService
package com.obob.service;import com.obob.dao.UserDao;public class UserService {private UserDao userDao;public void login() {userDao.login();} }Factory
package com.obob;import com.obob.dao.UserDao;public class Factory {public static UserDao initUserDao() {return new UserDao();} }配置文件:
<bean name="userService" class="com.obob.service.UserService"><property name="staticUserDao" ref="staticUserDao" /> </bean> <bean name="staticUserDao" class="com.obob.Factory" factory-method="initUserDao"></bean>4、實例工廠的方法注入
實例工廠的意思是獲取對象實例的方法不是靜態的,所以你需要首先new工廠類,再調用普通的實例方法:
此種方式無通過注解注入
4.1 配置文件注入
UserService
package com.obob.service;import com.obob.dao.UserDao;public class UserService {private UserDao userDao;public void login() {userDao.login();} }Factory
package com.obob;import com.obob.dao.UserDao;public class Factory {public UserDao initUserDao() {return new UserDao();} }配置文件:
<bean name="userService" class="com.obob.service.UserService"><property name="staticUserDao" ref="staticUserDao" /> </bean> <bean name="staticUserDao" factory-bean="factory" factory-method="initUserDao"></bean> <bean name="factory" class="com.obob.Factory"></bean>5、總結
這四種方式,最常用的是1和2(set方法、構造方法注入)
總結
以上是生活随笔為你收集整理的spring四种依赖注入方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 徒手实现Spring的IOC
- 下一篇: Sprig boot自动配置