日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

前言

Spring 是 JAVA EE 編程領域的一款輕量級的開源框架,由被稱為“Spring 之父”的 Rod Johnson 于 2002 年提出并創立,它的目標就是要簡化 Java 企業級應用程序的開發難度和周期。

Spring 自誕生以來備受青睞,一直被廣大開發人員作為 Java 企業級應用程序開發的首選。時至今日,Spring 儼然成為了 Java EE 代名詞,成為了構建 Java EE 應用的事實標準。

1. Spring簡介

Spring是一個分層的Java SE/EE應用一站式的輕量級開源框架。Spring核心是IOC和AOP。

Spring主要優點包括:

  • 方便解耦,簡化開發,通過Spring提供的IoC容器,我們可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼造成的程序耦合度高。
  • AOP編程的支持,通過Spring提供的AOP功能,方便進行面向切面編程。
  • 聲明式事務的支持,在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。
  • 方便程序的測試,可以用非容器依賴的編程方式進行幾乎所有的測試工作。
  • 方便集成各種優秀框架,Spring提供了對各種優秀框架的直接支持。

2. Spring體系結構

如下圖所示,整個spring框架按其所屬功能可以劃分為五個主要模塊,這五個模塊幾乎為企業應用提供了所需的一切,從持久層、業務層到表現層都擁有相應的支持,這就是為什么稱Spring是一站式框架的原因。

 

2.1 核心模塊(Core ContAIner)

Spring的核心模塊實現了IoC的功能,它將類和類之間的依賴從代碼中脫離出來,用配置的方式進行依賴關系描述。由IoC容器負責類的創建,管理,獲取等。BeanFactory接口是Spring框架的核心接口,實現了容器很多核心的功能。

Context模塊構建于核心模塊之上,擴展了BeanFactory的功能,包括國際化,資源加載,郵件服務,任務調度等多項功能。ApplicationContext是Context模塊的核心接口。

表達式語言(Expression Language)是統一表達式語言(EL)的一個擴展,支持設置和獲取對象屬性,調用對象方法,操作數組、集合等。使用它可以很方便的通過表達式和Spring IoC容器進行交互。

2.2 AOP模塊

Spring AOP模塊提供了滿足AOP Alliance規范的實現,還整合了AspectJ這種AOP語言級的框架。通過AOP能降低耦合。

2.3 數據訪問集成模塊(Data Access/Integration )

該模塊包括了JDBC、ORM、OXM、JMS和事務管理:

  1. 事務模塊:該模塊用于Spring管理事務,只要是Spring管理對象都能得到Spring管理事務的好處,無需在代碼中進行事務控制了,而且支持編程和聲明性的事務管理。
  2. JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統冗長的JDBC編碼還有必須的事務控制,而且能享受到Spring管理事務的好處。
  3. ORM模塊:提供與流行的“對象-關系”映射框架的無縫集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事務管理,無需額外控制事務。
  4. OXM模塊:提供了一個對Object/XML映射實現,將Java對象映射成XML數據,或者將XML數據映射成java對象,Object/XML映射實現包括JAXB、Castor、XMLBeans和XStream。
  5. JMS模塊:用于JMS(Java Messaging Service),提供一套“消息生產者、消息消費者”模板用于更加簡單的使用JMS,JMS用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。

2.4 Web模塊

該模塊建立在ApplicationContext模塊之上,提供了Web應用的功能,如文件上傳、FreeMarker等。Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。

2.5 測試模塊

Spring可以用非容器依賴的編程方式進行幾乎所有的測試工作,支持JUnit和TestNG等測試框架。

3. 初識Ioc與DI

 

我們首先來講解一下IoC的概念。IoC(控制反轉:Inverse of Control)是Spring容器的核心,但是IoC這個概念卻比較晦澀,讓人不太容易望文生義。

3.1 IoC控制反轉和DI依賴注入

傳統程序設計中,我們需要使用某個對象的方法,需要先通過new創建一個該對象,我們這時是主動行為;而IoC是我們將創建對象的控制權交給IoC容器,這時是由容器幫忙創建及注入依賴對象,我們的程序被動的接受IoC容器創建的對象,控制權反轉,所以叫控制反轉。

由于IoC確實不夠開門見山,所以提出了DI(依賴注入:Dependency Injection)的概念,即讓第三方來實現注入,以移除我們類與需要使用的類之間的依賴關系??偟膩碚f,IoC是目的,DI是手段,創建對象的過程往往意味著依賴的注入。我們為了實現IoC,讓生成對象的方式由傳統方式(new)反轉過來,需要創建相關對象時由IoC容器幫我們注入(DI)。

簡單的說,就是我們類里需要另一個類,只需要讓Spring幫我們創建 ,這叫做控制反轉;然后Spring幫我們將需要的對象設置到我們的類中,這叫做依賴注入。

3.2 常見的幾種注入方法

使用有參構造方法注入

public class  User{
    private String name;
    public User(String name){
        this.name=name;
    }
} 

    User user=new User("tom");

使用屬性注入

public class  User{
    private String name;
    public void setName(String name){
        this.name=name;
    }
}

     User user=new User();
     user.setName("jack");

使用接口注入

// 將調用類所有依賴注入的方法抽取到接口中,調用類通過實現該接口提供相應的注入方法。 

public interface Dao{
    public void delete(String name);
} 

public class DapIml implements Dao{
    private String name;
    public void delete(String name){
        this.name=name;
    }
}

通過容器完成依賴關系的注入

上面的注入方式都需要我們手動的進行注入,如果有一個第三方容器能幫助我們完成類的實例化,以及依賴關系的裝配,那么我們只需要專注于業務邏輯的開發即可。Spring就是這樣的容器,它通過配置文件或注解描述類和類之間的依賴關系,自動完成類的初始化和依賴注入的工作。

3.3 Spring的IoC例子

(1) 創建工程,導入jar包

這里我們只是做IoC的操作,所以只需要導入核心模塊里的jar包,beans、core、context、expression等。因為spring中并沒有日志相關的jar包,所以我們還需要導入log4j和commons-logging。

(2) 創建一個類

public class User {
    public void add(){
        System.out.println("add.....");
    }
}

(3) 創建一個xml配置文件

<?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"> 

    //配置要創建的類  
    <bean id="user" class="com.cad.domain.User"/>        
</beans>

(4) 進行測試

//這只是用來測試的代碼,后期不會這么寫
public class Test {

    @org.junit.Test
    public void test(){
        //加載配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        //獲取對象
        User user=(User) context.getBean("user");
        System.out.println(user);
        //調用方法
        user.add();
    }
}

在容器啟動時,Spring會根據配置文件的描述信息,自動實例化Bean并完成依賴關系的裝配,從容器中即可獲得Bean實例,就可以直接使用。Spring為什么僅憑一個簡單的配置文件,就能神奇的實例化并配置好程序使用的Bean呢?答案是通過 Java的反射技術。

3.4 Spring的DI例子

我們的service層總是用到dao層,以前我們總是在Service層new出dao對象,現在我們使用依賴注入的方式向Service層注入dao層。

// UserDao
public class UserDao {
    public void add(){
        System.out.println("dao.....");
    }
}

// UserService
public class UserService {
    UserDao userdao;
    public void setUserdao(UserDao userdao){
        this.userdao=userdao;
    }

    public void add(){
        System.out.println("service.......");
        userdao.add();
    }
}

----------------------------------------------------

// 配置文件
<bean id="userdao" class="com.cad.domain.UserDao"></bean> 
//這樣在實例化service的時候,同時裝配了dao對象,實現了依賴注入
<bean id="userservice" class="com.cad.domain.UserService">
    //ref為dao的id值
    <property name="userdao" ref="userdao"></property>
</bean>

4. Spring資源訪問神器——Resource接口

JDK提供的訪問資源的類(如java.NET.URL,File)等并不能很好很方便的滿足各種底層資源的訪問需求。Spring設計了一個Resource接口,為應用提供了更強的訪問底層資源的能力,該接口擁有對應不同資源類型的實現類。

4.1 Resource接口的主要方法

  • boolean exists():資源是否存在
  • boolean isOpen():資源是否打開
  • URL getURL():返回對應資源的URL
  • File getFile():返回對應的文件對象
  • InputStream getInputStream():返回對應資源的輸入流

Resource在Spring框架中起著不可或缺的作用,Spring框架使用Resource裝載各種資源,包括配置文件資源,國際化屬性資源等。

4.2 Resource接口的具體實現類

  • ByteArrayResource:二進制數組表示的資源
  • ClassPathResource:類路徑下的資源 ,資源以相對于類路徑的方式表示
  • FileSystemResource:文件系統資源,資源以文件系統路徑方式表示,如d:/a/b.txt
  • InputStreamResource:對應一個InputStream的資源
  • ServletContextResource:為訪問容器上下文中的資源而設計的類。負責以相對于web應用根目錄的路徑加載資源
  • UrlResource:封裝了java.net.URL。用戶能夠訪問任何可以通過URL表示的資源,如Http資源,Ftp資源等

4.3 Spring的資源加載機制

為了訪問不同類型的資源,必須使用相應的Resource實現類,這是比較麻煩的。Spring提供了一個強大的加載資源的機制,僅通過資源地址的特殊標識就可以加載相應的資源。

Spring定義了一套資源加載的接口。ResourceLoader接口僅有一個getResource(String location)的方法,可以根據資源地址加載文件資源。資源地址僅支持帶資源類型前綴的地址,不支持Ant風格的資源路徑表達式。ResourcePatternResolver擴展ResourceLoader接口,定義新的接口方法getResources(String locationPattern),該方法支持帶資源類型前綴以及Ant風格的資源路徑的表達式。
PathMatchingResourcePatternResolver是Spring提供的標準實現類。

分享到:
標簽:Spring
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定