Spring

一,Spring的概念    (4.x版本)


    1,spring是一個開源的輕量級框架(免費,源碼公開,不需要依賴過多其它工具)

    

    2,spring核心的兩部分:

        

        (1),aop : 面向切面編程-----------擴展功能 不是修改源代碼來實現


        (2),ioc  : 控制反轉---------創建類對象,不是通過new來實現,而是通過spring配置來創建   

    

    3,spring是一站式框架


        spring在javaee三層結構中,每一層都提供不同的解決技術


        -----Web層 :    springMVC


        -----Service層:    spring的ioc  


        -----Dao層:    spring的jdbcTemplate     

    

二,Spring的IOC介紹


    1,作用:    將對象的創建交給spring進行管理


    2,ioc操作的兩部分:

        

        (1),    配置文件方式

        

        (2),    註解方式


三,IOC底層原理

    

    1,底層技術

        

        (1),    xml配置文件


        (2),    dom4j解析


        (3),    工廠設計模式


        (4),    反射


    2,對比分析(以及ioc的底層實現原理)

        

        核心:解決耦合度過高的問題,符合高內聚,低耦合的思想


        傳統方案:    new對象,一改全改

        改良方案:(工廠設計模式):    通過工廠模式獲得類對象,工廠與業務類建立了新的耦合

        現代方案:    ioc(修改類名,包名時,修改相應的xml配置文件就行)

            

            第一步:    創建xml配置文件,配置要創建的對象類


       <bean     id="UserService"     class="com.zhuo.service.UserService">

           

             第二步:    創建工廠類,使用dom4j解析xml文件+反射,獲得類對象

     public class Factory{
         public static UserService getUserService(){
             //dom4j解析,通過id值獲得class值
             String classvalue =   "class屬性值"
             //使用反射獲得字節碼文件
             Class claz = Class.forName(classvalue);
             //創建類對象
             UserService us = claz.newInstance();
             return us;       
         }
     }


四,IOC入門案例


        wKiom1jHV3jT-MXgAAHyos-sKEM003.png


        1,導jar包(基本包,日誌包)

        2,創建類

        3,創建xml配置文件(引入xml約束,在文檔中找)

        4,使用spring內置對象和方法創建類對象

                //獲得文件路徑

                ApplicationContext context = new ClassPathXmlApplicationContext(""); 
                //創建類對象

                User user = (User)context.getBean("id");

        5,解決配置文件沒有提示的問題


        wKioL1jHXLGRGcuSAAPYpk672q4407.png-wh_50



五,spring的bean管理(xml配置文件)

  

 (1)實例化的三種方式

        I,調用無參構造函數

 <bean id="user" class="com.zhuo.domain.User"></bean>

        II,靜態工廠

 <bean id="user" class="com.zhuo.factory.Factory" factory-method="getUser"></bean>

        III,實例工廠

 <bean id="factory" class="com.zhuo.factory.Factory"></bean>
 <bean id="user" factory-bean="factory" factory-method="getUser"></bean>


(2)Bean標籤的常用屬性

            id , class , name ,scope

             -----scope屬性:設置bean的作用範圍

                    singleton    默認,單例

                    prototype    多例的


(3)三種屬性注入方式

        I,set方法

        II,有參構造函數注入

  <bean id="demo" class="com.zhuo.user.User">
       <constuctor-arg name="name" value="小王"></constuctor-arg>
  </bean>

        III,接口注入

  <bean id="demo" class="com.zhuo.user.User">
       <property name="name" value="小王"></property>
  </bean>

(4)注入對象類型屬性(重點掌握)

  案例:在UserService中注入UserDao對象
  //在UserService類中定義一個UserDao類型的私有變量
  //創建相應的get方法
  //在xml文件中進行注入配置
  <bean id="UserDao" class="com.zhuo.dao.UserDao"></bean>
  <bean id="UserService" class="com.zhuo.service.UserService">
      <property name="userdao" ref="UserDao"></property>
  </bean>

(5)P名稱空間注入(會用就行)


    wKiom1jHgbqCEAf3AACl1AB-NE4339.png


(6)注入複雜類型的屬性

    數組,列表,map,properties

    <bean id = "person"    class="com.zhuo.domain.Person">

        //數組

        <property name="args">

                <list>

                        <value>小王</value>

                        <value>小馬</value>

                </list>

        </property>

        

        //列表

        <property name="list">

                <list>

                        <value>小王</value>

                        <value>小馬</value>

                </list>

        </property>


        //map

         <property name="map">

                <map>

                        <entry key="a" value="1"></entry>

                        <entry key="b" value="2"></entry>

                </map>

        </property>

        

        //properties  

        <property name="properties">

                <props>

                        <prop key="a">123</prop>

                        <prop key="b">456</prop>

                </map>

        </property>

    </bean>


(7)IOC和DI的區別

        

        IOC:控制反轉,把對象的創建交給spring來管理

        

         DI:依賴注入,向類裏面的屬性設置值


         關係:DI不能淡出存在,要在IOC的基礎上完成


六,Spring整合web項目原理

        

    1,加載spring核心配置文件,每次new,實現功能,性能很低

        ApplicationContext context = new ClassPathXmlApplicationContext("abc.xml");


    2,解決思想:把加載配置文件,創建對象過程,在服務器啓動時完成,把壓力交給服務器


    3,實現原理:

        

            I,ServletContext對象


            II,監聽器


            III,具體流程:


                在服務器啓動時,會創建唯一一個ServletContext對象,通過監聽器可以知道這個對象具體在什麼時候創建

                 此時可以完成配置文件的加載和對象的創建,並加載到ServletContext這個域對象中

                之後從域對象中獲取對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章