1. 程式人生 > >JavaWeb學習之路——SSM框架之Spring(四)

JavaWeb學習之路——SSM框架之Spring(四)

SSM框架學習-Spring01

1,.Spring介紹

Spring 是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個元件,同時為 J2EE 應用程式開發提供整合的框架。

2.功能

1).Spring IOC(DI):依賴注入、控制反轉

2).Spring AOP:面向切面程式設計

3).宣告式事務

4).Spring Struts Struts2 SpringMVC表現層整合

5).Sring Transction事物整合;

6).SSH(Spring Struts Hibernate)框架

7).SpringMVC Spring 提供表現層整合;

8).SSM(Spring SpringMVC MyBatis)

IOC:

控制反轉:它是程式中的之間的關係,不用程式碼控制,而完全是由容器來控制。 

例如:

在之前我們建立物件的時候,需要New 一下,然後後面接一個類,呼叫構造方法,這樣jvm就會給我們生產一個物件,如:Person person =new Person,這時候就產出了person這個物件。但是有了Spring以後,我們只需要在Bean 裡面配置好,就可以使用了;

AOP

它利用一種稱為”橫切”的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用模組。

所謂”切面”,簡單說就是那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組之間的耦合度,並有利於未來的可操作性和可維護性。

3.Spring執行時環境

Test:提供的一個測試功能;

Core Container:為核心容器,啟動Spring的基本檔案;

    Beans:負責管理物件

    Context:上下文引數。獲取外部資源或管理註解等

AOP:實現aop功能需要依賴

Aspects:切面AOP依賴的包

Data Access/Integration:spring封裝資料訪問層的相關內容

    JDBC:Spring對JDBC封裝後的程式碼

    ORM:封裝了一些持久層框架的程式碼。例如:Hibernate

    Transaction:對應spring-tx.jar,宣告式  事務使用

WEB:需要spring完成web相關功能時需要。例如:由tomcat載入spring配置檔案時需要有spring-web.jar包

1)容器(Container):Spring當做一個大容器

2)BeanFactory介面,老版本,新版本中ApplicationContext介面,是BeanFactory子介面。BeanFactory的功能在ApplicationContext中都有

3)從Spring3開始把Spring框架的功能拆分為多個jar,2以前就一個jar

4.IOC——控制反轉

  1) IoC完成的事情是不由new例項化物件,而轉交給Spring負責,控制指的是控制類的物件,反轉指的是轉交給Spring負責。

   其作用就是——解耦。

   程式設計師不需要管理物件,解除了物件管理和程式設計師之間的耦合

javabeansXML配置檔案:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- id表示獲取到物件標識

      class 建立哪個類的物件

     -->

    <bean id="flo" class="com.likui.pojo.Flower">

    <property name="name" value="牡丹"></property>

    <property name="id" value="1"></property>

    <property name="price" value="2.0"></property>

    <property name="production" value="中國"></property>

    </bean>

</beans>

java中得到這個物件:

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

Flower flower = ac.getBean("flo",Flower.class);

System.out.println(flower.getId()+"  "+flower.getName()+"  "+

flower.getPrice()+"  "+flower.getProduction());

結果展示:

2)spring建立物件的三種方式

(1)通過構造方法構建

無參構造方法:預設。

有參構建物件:前提為類中有有參構造器,然後需要在bean中明確配置,

java有參構造器

     public Flower(int id, String name, double price, String production) {

           this.id = id;

           this.name = name;

           this.price = price;

           this.production = production;

     }

javabean中順序寫法

    <bean id="flo2" class="com.likui.pojo.Flower">

    <!--ref引用另一個bean,value引用基本資料型別

     index代表引數索引,name、type和index可以確定使用哪一個有參構造器,預設為最後一個-->

    <constructor-arg index="0" name="id" type="int" value="0"> </constructor-arg>

    <constructor-arg index="1" name="name"  value="月季"> </constructor-arg>

    <constructor-arg index="2" name="price" type="double" value="2.5"> </constructor-arg>

    <constructor-arg index="3" name="production" value="日本"> </constructor-arg>

    </bean>

(2)例項工廠——需要先建立工廠,才能生產物件

工廠模式:幫助建立類物件,一個工廠可以生產多個物件。

一般模板:

public static INoodles createNoodles(int type) {

        switch (type) {

            case TYPE_LZ:

                return new LzNoodles();

            case TYPE_PM:

                return new PaoNoodles();

            case TYPE_GK:

            default:

                return new GankouNoodles();

        }

 }

例項工廠具體使用方法:

xml配置檔案:利用bean創造工廠類的物件,然後利用這個工廠物件生產相應的物件 

  <bean id="factory" class="com.likui.pojo.Factory"></bean>

    <bean id="rose" factory-bean="factory" factory-method="newInstance2"></bean>

java檔案:

public class Factory {

     //普通工廠模式程式碼

     public Flower newInstance(String key) {

           switch (key) {

           case "Flower":

                return new Flower();

           case "rose":

                return new Flower();

           default:

                return null;

           }

     }

     //使用javabean建立物件

     public Flower newInstance2(){

           return new Flower(1,"牡丹",3.0,"日本");

     }

}

(3)靜態工廠——不需要建立工廠就能產生物件

使用具體方法:將工廠類中的方法使用static來使用,不需要建立工廠物件

xml中配置檔案:

<bean id="rose2" class="com.likui.pojo.Factory" factory-method="newInstance3"></bean>

3)對物件屬性賦值

(1)利用構造器來對屬性賦值(前面已有)

(2)利用set方法來賦值,即利用property來利用set方法來注入,基本資料型別或者String,value放裡面或者外面都可以

list、set、map用相應的屬性標籤來一個個給它們進行賦值

     <bean id="flo" class="com.likui.pojo.Flower">

    <property name="name" value="牡丹"></property>

    <property name="id" ><value>1</value></property>

    <property name="price" value="2.0"></property>

    <property name="production" value="中國"></property>

    <property name="list">

    <list>

    <value>1</value>

    <value>2</value>

    <value>3</value>

    </list>

    </property>

    </bean>

5.DI(Dependency injection)——依賴注入

它與IoC功能是一樣的,當一個類中需要另一個類的物件時,在類的內部為另一個類物件賦值,就是依賴注入

用法:在類中用property進行賦值時,只需要用ref來引用另一個類的物件,這裡的引用物件就是另一個bean

依賴注入類:

public class Factory {

     private Flower flower;

     public Flower getFlower() {

           return flower;

     }

     public void setFlower(Flower flower) {

           this.flower = flower;

     }

}

xml配置檔案: 

   <bean id="factory" class="com.likui.pojo.Factory">

    <property name="flower" ref="flo2"></property>

    </bean>

java中使用方法;

     Factory factory=ac.getBean("factory",Factory.class);

     System.out.println(factory.getFlower().getName());