Spring
Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。
Spring 框架
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式
組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:
- 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是
BeanFactory
,它是工廠模式的實現。BeanFactory
使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開。 - Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
- Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。
- Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
- Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
- Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基於 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。
- Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。
IOC
控制反轉模式(也稱作依賴性介入)的基本概念是:不創建對象,但是描述創建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯系在一起。
IOC實現模式:1、通過 JavaBean 的屬性(例如 setter 方法)分配依賴性
2、依賴性以構造函數的形式提供,不以 JavaBean 屬性的形式公開
AOP
面向方面的編程,即 AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。
AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的復雜問題。在典型的面向對象開發方式中,可能要將日志記錄語句放在所有方法和 Java 類中才能實現日志功能。在 AOP 方式中,可以反過來將日志服務模塊化,並以聲明的方式將它們應用到需要日志的組件上。當然,優勢就是 Java 類不需要知道日志服務的存在,也不需要考慮相關的代碼。所以,用 Spring AOP 編寫的應用程序代碼是松散耦合的。
Spring 環境搭建
第一步:先去了解一下spring的官網,在里面找到spring的框架的jar,最新版的就可以
第二步:在你的eclipse中見一個Java project項目就可以,創建一個lib文件夾將你的jar包放入其中並引入,在你的src文件下創建一個xml文件,是關於spring的一些配置的,這里名字可以自己定義,以后會有指定的名字叫applicationContext.xml,也可以現在就設置這個名,項目結構:
第三步:先建一個接口和他的實現類
接口
package com.spring.action; /** * * @author 堅持到你GL * */ public interface HelloWorld { public String hello(); }
實現類
package com.spring.action; /** * * @author 堅持到你GL * */ public class HelloWorldImpl implements HelloWorld{ @Override public String hello() { // TODO Auto-generated method stub return "Hello World!!!"; } }
第四步:配置一下你的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" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="helloWorld" class="com.spring.action.HelloWorldImpl"></bean>
簡單說一些其中的屬性說明,一些沒出現的屬性說明
<!-- id是bean的標識符,必須唯一,如果沒有配置id,name默認為標識符 如果配置了id,有配置了name,那么name為別名 name可以設置多個別名,分隔符可以是空格 逗號 分號 class是bean的全限定名,即包名加類名 如果不配置id和name,那么可以根據applicationContext.getbean(Class)獲取對象, scope:bean的作用域, 取值:singleton:單例的,整個容器只產生一個對象,默認是單例 prototype:原型,每次獲取bean都創建一個新對象 request:每次請求時創建一個新的對象 session:在一個會話范圍內只產生一個對象 application:在應用范圍內是一個對象 autowire:自動裝配 用於簡化spring的配置 取值:byname:根據名稱(根據set方法中set后面的內容)去查找相應的bean,發現了則裝載上 bytype:根據類型自動裝配,不用去管id,但同一種類型的bean只能有一個,f否則報錯 constructor,當通過構造器注入實例化bean時,裝配構造方法 --> <!--可以讀取到其他配置的xml,如果在當前目錄下,直接寫文件名,如果是在其他目錄下,要寫完整包名,以"/"分隔--> <import resource="beans1.xml"/>
第五步:建一個測試類
package com.spring.action; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * * @author 堅持到你GL * */ public class Test { public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext apc = new ClassPathXmlApplicationContext("springXML/HelloWorld.xml"); HelloWorld hello = apc.getBean("helloWorld",HelloWorld.class); System.out.println(hello.hello()); } }
這樣一個Hello World就完整寫完是最簡單的一個
【版本聲明】本文為博主原創文章,轉載請注明出處