承接上篇:
Spring中,如何給對象的屬性指派:
1:通過構造函數,如下所示:
<!-- 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方法給屬性注入值,如下所示:
<!-- 通過set方法給屬性注入值,是通過set方法給屬性指派的哦, 通過容器注入值--> <bean id="user" class="com.bie.po.User"> <property name="id" value="10010"></property> <property name="name" value="李四"></property> </bean>
2.1:通過set方法實作dao的注入,service的注入,action的注入;如下所示:
實作上面的前提是已經在對應的類中實作了下面的set方法和私有的類的成員變量的定義;
比如:在service層的方法中實作UserDao的定義和set方法的實作。
在action層的方法中實作UserService的定義和set方法的實作。
<!-- 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> <!-- 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 --> <property name="userService"> <bean class="com.bie.service.UserService"> <property name="userDao"> <bean class="com.bie.dao.UserDao"></bean> </property> </bean> </property>
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="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="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]中隻有一個該類型的對象)
比如:在service層的方法中實作UserDao的定義和set方法的實作。
在action層的方法中實作UserService的定義和set方法的實作。
<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
Spring的IoC容器是個好東西啊~~~