承接上篇:java
Spring中,如何給對象的屬性賦值:spring
1:經過構造函數,以下所示:app
<!-- 1:構造函數賦初始值 -->
<bean id="user1" class="com.bie.po.User">
<constructor-arg value="10010" type="int"></constructor-arg>
<constructor-arg value="張三" type="java.lang.String"></constructor-arg>
</bean>函數
2:經過set方法給屬性注入值,以下所示:this
<!-- 經過set方法給屬性注入值,是經過set方法給屬性賦值的哦, 經過容器注入值-->
<bean id="user" class="com.bie.po.User">
<property name="id" value="10010"></property>
<property name="name" value="李四"></property>
</bean> spa
2.1:經過set方法實現dao的注入,service的注入,action的注入;以下所示:code
實現上面的前提是已經在對應的類中實現了下面的set方法和私有的類的成員變量的定義;component
好比:在service層的方法中實現UserDao的定義和set方法的實現。xml
在action層的方法中實現UserService的定義和set方法的實現。對象
1 private UserDao userDao; 2 public void setUserDao(UserDao userDao) { 3 this.userDao = userDao; 4 }
1 private UserService userService; 2 public void setUserService(UserService userService) { 3 this.userService = userService; 4 }
1 private UserAction userAction; 2 public void setUserAction(UserAction userAction) { 3 this.userAction = userAction; 4 }
<!-- dao的set注入 -->
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<!-- service的set注入 -->
<bean id="userService" class="com.bie.service.UserService">
<!-- 處理對象的依賴關係,依賴注入 -->
<property name="userDao" ref="userDao"></property>
</bean>
<!-- action的set注入 -->
<bean id="userAction" class="com.bie.action.UserAction">
<!-- 處理對象的依賴關係,依賴注入 -->
<property name="userService" ref="userService"></property>
</bean>
2.2:經過內部bean實現dao的注入,service的注入,action的注入;以下所示:
(缺點,至關於局部變量,service和dao只能使用一次,不方便維護)
<!-- 內部bean -->
<bean id="userAction" class="com.bie.action.UserAction">
<property name="userService">
<bean class="com.bie.service.UserService">
<property name="userDao">
<bean class="com.bie.dao.UserDao"></bean>
</property>
</bean>
</property></bean>
3:p命名空間,以下所示:
《 注意:給對象屬性注入值也能夠經過p名稱空間給對象的屬性注入值,可是Spring的版本必須是3.0版本以上才能夠使用
必須在applicationContext.xml中引入這句話:xmlns:p="http://www.springframework.org/schema/p"
》
實現上面的前提是已經在對應的類中實現了下面的set方法和私有的類的成員變量的定義;
好比:在service層的方法中實現UserDao的定義和set方法的實現。
在action層的方法中實現UserService的定義和set方法的實現。
<!-- 使用p名稱空間給對象的屬性注入值 -->
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<bean id="userService" class="com.bie.service.UserService" p:userDao-ref="userDao"></bean>
<bean id="userAction" class="com.bie.service.UserAction" p:userService-ref="userService"></bean>
4:自動裝配(瞭解便可),以下所示:
4.1:根據名稱自動裝配:
實現上面的前提是已經在對應的類中實現了下面的set方法和私有的類的成員變量的定義;
好比:在service層的方法中實現UserDao的定義和set方法的實現。
在action層的方法中實現UserService的定義和set方法的實現。
<!-- 自動裝配
1:根據"名稱"自動裝配,userService注入的屬性,會去IoC容器中自動查詢和屬性名稱同名的對象
即在service層的方法中實現UserDao的定義的名稱去和IoC容器(applicationContext.xml)中名稱相同的。
-->
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<bean id="userService" class="com.bie.service.UserService" autowire="byName"></bean>
<bean id="userAction" class="com.bie.service.UserAction" autowire="byName"></bean>
4.2:根據類型自動裝配:(必須確保IoC容器[即applicationContext.xml]中只有一個該類型的對象)
實現上面的前提是已經在對應的類中實現了下面的set方法和私有的類的成員變量的定義;
好比:在service層的方法中實現UserDao的定義和set方法的實現。
在action層的方法中實現UserService的定義和set方法的實現。
<bean id="userDao" class="com.bie.dao.UserDao"></bean>
<bean id="userService" class="com.bie.service.UserService" autowire="byType"></bean>
<bean id="userAction" class="com.bie.service.UserAction" autowire="byType"></bean>
5:註解(優勢簡化配置,缺點不利於維護~~~做用把對象添加到IoC容器中),以下所示:
使用註解的開發步驟:《註解和xml配置能夠一塊兒使用的哦~~~》
(1):先引入context名稱空間
xmlns:context="http://www.springframework.org/schema/context"
(2):開啓註解掃描,指定掃描哪個包下面的類;
<!-- 開啓註解掃描 -->
<context:component-scan base-package="要掃描的包的名字"></context:component-scan>
(3):使用註解,經過註解的方式,把對象加入IoC容器中;
還有一種簡寫方式,直接寫@Component 和 @Resource,
@Component加入IoC容器的UserDao對象的引用名稱,默認和類名同樣,且第一個字母小寫。
@Resource去容器中找UserDao類型的變量,找到後賦值
(4):因爲dao層,service層,action層都是用@Component註解容易形成混亂,不能區分是那一層的註解;
dao層(持久層):@Component--->@Repository
service層(業務邏輯層):@Component--->@Service
action層(控制層):@Component--->@Controller
1 package com.bie.dao; 2 3 import org.springframework.stereotype.Component; 4 5 /** 6 * @author BieHongLi 7 * @version 建立時間:2017年3月13日 上午10:42:24 8 * 9 */ 10 //註解的意思就是將userDao加入到IoC容器中 11 //這個註解就至關於<bean id="userDao" class="com.bie.dao.UserDao"> 12 @Component("userDao") 13 public class UserDao { 14 15 public void test(){ 16 17 } 18 }
1 package com.bie.service; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Component; 6 7 /** 8 * @author BieHongLi 9 * @version 建立時間:2017年3月13日 上午10:42:24 10 * 11 */ 12 //註解的意思就是將userService加入到IoC容器中 13 //這個註解就至關於<bean id="userService" class="com.bie.service.userService"> 14 @Component("userService") 15 public class UserService { 16 17 //這個註解會從IoC容器中找userDao對象,注入到當前字段 18 @Resource(name="userDao") 19 //這個註解至關於這個IoC容器的配置 20 //<bean id="userService" class="com.bie.service.UserService"> 21 // <property name="userDao" ref="userDao"/> 22 //</bean> 23 24 //上面註解的userDao賦給下面的userDao的值了 25 private UserDao userDao; 26 27 public void test(){ 28 29 } 30 }
1 package com.bie.action; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Component; 6 7 /** 8 * @author BieHongLi 9 * @version 建立時間:2017年3月13日 上午10:42:24 10 * 11 */ 12 //註解的意思就是將userAction加入到IoC容器中 13 //這個註解就至關於<bean id="userAction" class="com.bie.action.userAction"> 14 @Component("userAction") 15 public class UserAction { 16 17 //這個註解會從IoC容器中找userService對象,注入到當前字段 18 @Resource(name="userService") 19 //這個註解至關於這個IoC容器的配置 20 //<bean id="userAction" class="com.bie.action.userAction"> 21 // <property name="userService" ref="userService"/> 22 //</bean> 23 24 //上面註解的userService賦給下面的userService的值了 25 private UserDao userService; 26 27 public void test(){ 28 29 } 30 }
Spring的IoC容器是個好東西啊~~~