詳析Spring中依附注入的三種方法。本站提示廣大學習愛好者:(詳析Spring中依附注入的三種方法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳析Spring中依附注入的三種方法正文
媒介
平凡的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
@Component public class UserDao{ public void inserUser(User user){ //詳細邏輯省略 } }
UserService.java
public Interface UserService{ void inserUser(User user); }
UserServiceImpl.java
//引入響應的Spring包 @Service public 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中依附注入的幾種方法的全體引見,願望能對年夜家的進修或許任務帶來必定的贊助,假如有疑問年夜家也能夠留言交換,感謝年夜家對的支撐。