1. 程式人生 > >Spring的ioc介紹,配置檔案和基本使用

Spring的ioc介紹,配置檔案和基本使用

1. 什麼是spring,它能夠做什麼?

   Spring是一個開源框架,它由Rod Johnson建立。它是為了解決企業應用開發的複雜性而建立的。
   Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
   然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。
   目的:解決企業應用開發的複雜性
   功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能

   範圍:任何Java應用

   簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。
   
   1.1 中間層框架、萬能膠
       struts2
       spring
       hibernate
   1.2 容器框架
         JavaBean    專案中的一個個類
         IOC和AOP
        

2. 什麼是控制反轉(或依賴注入) 

   控制反轉(IoC=Inversion of Control)IoC,

用白話來講,就是由容器控制程式之間的(依賴)關係,而非傳統實現中,由程式程式碼直接操控。這也就是所謂“控制反轉”的概念所在:(依賴)控制權由應用程式碼中轉到了外部容器,控制權的轉移,是所謂反轉。
   IoC還有一個另外的名字:“依賴注入 (DI=Dependency Injection)”  ,即由容器動態的將某種依賴關係注入到元件之中 
   案例:實現Spring的IoC

   IOC/DI
     將以前由程式設計師例項化物件/賦值的工作交給了spring處理

3. 如何在spring當中定義和配置一個JavaBean(使用無參構造方法+set方法建立一個JavaBean)

配置檔案詳解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-autowire="byType"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--ioc的用途-->
    <!--<bean class="com.hw.one.dao.impl.TempDaoImpl1" id="t1"></bean>-->
    <bean class="com.hw.one.dao.impl.TempDaoImpl2" id="t2"></bean>

    <bean class="com.hw.one.action.TempAction" id="TempAction">
        <!--前面的name代表com.hw.one.action.TempAction 的屬性,ref為依賴的類,就是上方id=t1-->
        <property name="tempDao" ref="t2"></property>
    </bean>

    <!--ioc注入的型別和方式-->
    <bean class="com.hw.one.action.StudentAction" id="studentAction">
        <!--set方法注入-->
        <property name="sid" value="123"></property>
        <property name="sname" value="蓋倫"></property>
        <!--集合-->
        <property name="list">
        <list>
        <value>吃</value>
        <value>喝</value>
        <value>玩</value>
        <value>樂</value>
        </list>
        </property>

        <!--構造器注入-->
        <constructor-arg name="sid" value="123"></constructor-arg>
        <constructor-arg name="sname" value="蓋倫"></constructor-arg>
        <!--<property name="list">-->
        <!--<list>-->
        <!--<value>吃</value>-->
        <!--<value>喝</value>-->
        <!--<value>玩</value>-->
        <!--<value>樂</value>-->
        <!--</list>-->
        <!--</property>-->
    </bean>



    <!--自動裝配(上方加上default-autowire="byType")-->
    <!--bytype 根據管理的javabean的介面屬性在spring的上下文中自動實現類去注入,
    當一個介面有一個以上的實現類的時候會報錯,和spring的id無關,所以上方的
    <bean class="com.hw.one.dao.impl.TempDaoImpl1" id="t1"></bean>
    <bean class="com.hw.one.dao.impl.TempDaoImpl2" id="t2"></bean>
    這兩個需要註釋其中一個,不然就不能使用自動裝配

    byname:根據管理的javabean中的介面名,去spring中的上下文中的id去尋找進行注入
    -->
    <bean class="com.hw.one.dao.impl.TempDaoImpl21" id="t21"></bean>
    <bean class="com.hw.one.action.TempAction" id="TempAction2">
        <!--<property name="tempDao" ref="t1"></property>-->
        <!--<property name="tempDao2" ref="t21"></property>-->
    </bean>

</beans>