spring四种依赖注入方式
平常的java開(kāi)發(fā)中,程序員在某個(gè)類中需要依賴其它類的方法,通常是new一個(gè)依賴類再調(diào)用類實(shí)例的方法,這種開(kāi)發(fā)存在的問(wèn)題是new的類實(shí)例不好統(tǒng)一管理。
spring提出了依賴注入的思想,即依賴不由程序員控制,而是通過(guò)spring容器幫我們new指定實(shí)例并且將實(shí)例注入到需要該對(duì)象的類中。依賴注入的另一種說(shuō)法是“控制反轉(zhuǎn)”,通俗的理解是:平常我們new一個(gè)實(shí)例,這個(gè)實(shí)例的控制權(quán)是我們程序員,而控制反轉(zhuǎn)是指new實(shí)例工作不由我們程序員來(lái)做而是交給spring容器來(lái)做。
spring有4種依賴注入方式:
按照實(shí)現(xiàn)方式分為兩類:
以下對(duì)于4種依賴注入方式,分別使用兩種實(shí)現(xiàn)方式來(lái)實(shí)現(xiàn)
1、Set方法注入
Set方法注入是最簡(jiǎn)單、最常用的注入方式。
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注解默認(rèn)使用類型注入)@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、構(gòu)造方法注入
構(gòu)造方法注入是指帶有參數(shù)的構(gòu)造函數(shù)注入
2.1 注解注入:
package com.obob.service;import org.springframework.beans.factory.annotation.Autowired;import com.obob.dao.UserDao;public class UserService {private UserDao userDao;//注解到構(gòu)造方法處@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、靜態(tài)工廠的方法注入
靜態(tài)工廠顧名思義,就是通過(guò)調(diào)用靜態(tài)工廠的方法來(lái)獲取自己需要的對(duì)象。
為了使用Spring的依賴注入IOC,我們不直接通過(guò)"工程類.靜態(tài)方法()"來(lái)獲取對(duì)象,而是依然通過(guò)spring注入的形式獲取:
此種方式無(wú)通過(guò)注解注入
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、實(shí)例工廠的方法注入
實(shí)例工廠的意思是獲取對(duì)象實(shí)例的方法不是靜態(tài)的,所以你需要首先new工廠類,再調(diào)用普通的實(shí)例方法:
此種方式無(wú)通過(guò)注解注入
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、總結(jié)
這四種方式,最常用的是1和2(set方法、構(gòu)造方法注入)
總結(jié)
以上是生活随笔為你收集整理的spring四种依赖注入方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 徒手实现Spring的IOC
- 下一篇: Sprig boot自动配置