国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳析Spring中依賴注入的三種方式

2019-11-26 13:48:06
字體:
來源:轉載
供稿:網友

前言

平常的java開發中,程序員在某個類中需要依賴其它類的方法,則通常是new一個依賴類再調用類實例的方法,這種開發存在的問題是new的類實例不好統一管理,spring提出了依賴注入的思想,即依賴類不由程序員實例化,而是通過spring容器幫我們new指定實例并且將實例注入到需要該對象的類中。依賴注入的另一種說法是“控制反轉”,通俗的理解是:平常我們new一個實例,這個實例的控制權是我們程序員,而控制反轉是指new實例工作不由我們程序員來做而是交給spring容器來做。

在Spring中依賴注入有四種方式

     1、set注入(通常也叫屬性注入)

     2、構造函數注入

     3、接口注入(這個現在基本不用)

     4、注解注入(@Autowire)

下面對set方法注入,構造函數注入,以及注解注入的用法舉例說明。

1、set方法注入(屬性注入)

UserDao.java

public class UserDao{ public void inserUser(User user){  //具體邏輯省略 }}

UserService.java

public Interface UserService{ void inserUser(User user);}

UserServiceImpl.java

public class UserServiceImpl implements UserService{ private UserDao userDao; public void setUserDao(UserDao userDao){  this.userDao = userDao; } public void insertUser(User user){  userDao.insert(user); }}

Spring配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!--省略一些無關的配置書寫--> <bean id="userDao" class="UserDao"></bean> <bean id="userService" class="UserServiceImpl"> <property name="userDao" ref="userDao"> </bean> </beans>

以上就可以把userDao注入到UserServiceImpl中

2、構造函數注入

User.java

public class User{ //為了簡便,就寫兩個屬性 private String name; private Integer age; //關于name,age的getter/setter方法省略 public User(String name,int age){  this.name = name;  this.age = age; }}

現在通過Spring配置文件來注入這User這個對象

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!--省略一些無關的配置書寫--> <bean id="user" class="User">  <!--構造函數參數的下標從0開始(避免出現多個構造函數具有相同的參數個數)-->  <constructor-arg type="java.lang.String" index="0" value="zhangsan"/>  <constructor-arg type="java.lang.Integer" index="1" value="20> </bean> </beans>

以上就可以將屬性值注入到User對象中。當然如果想以set方法注入的例子話,其實也一樣。就是在UserServiceImpl需要構造函數,形參就是userDao了,就不需要setter方法了。

那么關于其Spring的配置文件的書寫應該改成這樣

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!--省略一些無關的配置書寫--> <bean id="userDao" class="UserDao"></bean> <bean id="userService class="UserServiceImpl">  <!--構造函數參數的下標從0開始(避免出現多個構造函數具有相同的參數個數)-->  <constructor-arg index="0" ref="userDao"> </bean> </beans>

這樣也能實現上面set方法注入達到的效果

3、注解注入

我沒試過在這些類上不加@Component,@Service,@Controller等直接@Autowire,是否能成功注入,不過養成一個比較好的編程習慣,建議在相應的層次加上相應的注解。如下例子中UserDao屬于Modul層,在Spring中可以用@Component注解

UserDao.java

@Componentpublic class UserDao{ public void inserUser(User user){  //具體邏輯省略 }}

UserService.java

public Interface UserService{ void inserUser(User user);}

UserServiceImpl.java

//引入相應的Spring包@Servicepublic class UserServiceImpl implements UserService{ @Autowire private UserDao userDao; public void insertUser(User user){  userDao.insert(user); }}

Spring對應的配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!--省略一些無關的配置書寫--> <!--*代表對所有的包進行掃描,在實際開發中可以根據涉及到注解組件的包進行掃描--> <context:component-scan base-package="*"><!-- 開啟組件掃描 --></context:component-scan><context:annotation-config><!--開啟注解處理器--></context:annotation-config> <bean id="userDao" class="UserDao"></bean> <bean id="userService" class="UserServiceImpl"/> </beans>

不過在開發過程中既開啟了set方法注入,有開啟了注解注入的話,Spring會首選set注入的,所以不忘了提供相應的set方法的,否則會出現失敗。

通過比較,注解注入要比其余注入要方便的多,代碼和配置文件也寫的少,在開發的過程中還是建議使用注解注入。

總結

以上就是關于Spring中依賴注入的幾種方式的全部介紹,希望能對大家的學習或者工作帶來一定的幫助,如果有疑問大家也可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 稷山县| 昌宁县| 宝坻区| 鹤庆县| 朝阳县| 嘉峪关市| 通渭县| 鄂托克旗| 临城县| 牟定县| 尖扎县| 宁河县| 壤塘县| 昌吉市| 曲水县| 玉溪市| 高唐县| 鸡东县| 宜州市| 台北市| 辉县市| 社会| 兰考县| 毕节市| 肇州县| 金溪县| 宜兰县| 巴马| 阿鲁科尔沁旗| 高淳县| 哈尔滨市| 灯塔市| 锡林郭勒盟| 闽清县| 六安市| 通州区| 于都县| 淳化县| 册亨县| 乐都县| 湟源县|