Spring概念入門

Spring是什麼
spring是一個開源的java框架,集成了各種主流的技術包括web mvc,orm,ejb,rmi,javamail等
他就象一個粘合濟,在實際項目中,將前後臺程序粘合在一起,構建出一個完整的系統。

spring中的各個組件也可獨立使用,你可以在你的項目中選擇性的使用spring提供的某一部分功能

Spring的核心是ioc和aop

什麼是IOC

Inversion of Control,控制反轉或反轉控制,其和另外一個概念DI-Dependency Injection依賴注入
等價。

到底如何來理解IOC?

IOC確切的說,他是一種思想、概念,跟OOP是一種編程思想一樣,他是在大量的項目實踐中總結出來了
的一種精妙地程序設計思想。在原先的程序設計中,我們通常是通過new XXX(),其中,XXX就是某個類
的名稱,在沒有ioc思想引入時,我們程序中大量充斥着new XXX()這樣的代碼。這些代碼都需要我們程
序員手工編寫。而引入了ioc思想之後,對象的管理全部交給Spring這個容器來管理,當我們程序需要
對應類的對象時,我們直接從Spring容器裏面獲取,換句話說,就是Spring容器把產生好的對象交給了
我們的程序,這種方式就叫做注入(就跟醫生拿着可怕的針管將液體注入到我們的屁股上一樣,爲什麼
要注入,還不是你的屁股需要嘛!因爲你需要,所以我給你,這就是DI)

而IOC的深層含義就是,將原先對象產生的主動權交給了Spring容器,由Spring容器來爲我們完成對象的
new的過程,並將對象在我們需要時交給我們。

Spring正是IOC思想的一個完美產物和實踐者!

什麼是aop

Aspect Oriented Programming,面向方面編程,它也是一種編程思想,它是對OOP編程思想的一種昇華
OOP強調的是對象,而aop強調的是面(不是餃子)

那麼,什麼是面?

如果拿我們的教室做比方,那麼教室的前門和後窗就是一個面,一個截面,通過這樣的截面,將我們這塊
空間分成了室內、窗外和門外三部分。

如果拿我們吃的漢堡做比方,那麼漢堡的夾心的前後就是一個面,一個截面,通過這樣的截面,將我們的
普通麪包分成了麪包上層、夾心、麪包下層。

如果。。。

還是拿我們的程序代碼來說,
如果我們的dao用jdbc實現,那麼在dao的每一個方法裏都充斥着這樣的代碼,
    打開連接
    執行sql語句
    關閉連接
那麼,這時,我們就可以在執行sql前後做出一個截面,通過這樣的截面,將我們的程序代碼分開,將打開
連接和關閉連接交給AOP去做,我們程序員只關注執行不同sql語句部分,避免了在dao的每個方法中都要編
寫重複的打開連接和關閉連接代碼。

如果我們的dao用hibernate實現,那麼在dao的每一個方法裏都充斥着這樣的代碼
    打開session
    執行session動作
    關閉session

同理,我們就可以在執行session動作前後做出一個截面,通過這樣的截面,將我們的程序代碼分開,將打開
session和關閉session交給AOP去做,我們程序員只關注執行session動作,避免了代碼的重複豈不更好

這就是AOP,好好理解吧,那可是個漫長的思想體驗過程!祝你好運!

 

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

spring的另外一個入門概念

 

一、    Spring誕生
Spring是一個開源框架,目前在開源社區的 人氣很旺,被認爲是最有前途的開源框架之一。她是由Rod Johnson創建的,她的誕生是爲了簡化企業級系統的開發。說道Spring就不得不說 EJB,因爲Spring在某種意義上是EJB的替代品,她是一種輕量級的容器。用過EJB的人都知道EJB很複雜,爲了一個簡單的功能你不得不編寫多個 Java文件和部署文件,他是一種重量級的容器。也許你不瞭解EJB,你可能對“輕(重)量級”和“容器”比較陌生,那麼這裏我簡單介紹一下。
1、什麼是容器
“容 器”,這個概念困擾我好久。從學習Tomcat開始就一直對此感到困惑。感性的來講,容器就是可以用來裝東西的物品。那麼在編程領域就是指用來裝對象 (OO的思想,如果你連OO都不瞭解,建議你去學習OO先)的對象。然而這個對象比較特別,它不僅要容納其他對象,還要維護各個對象之間的關係。這麼講可 能還是太抽象,來看一個簡單的例子:
代碼片斷1:

  1. public  class  Container  
  2. {
  3.     public  void  init()
  4.     {
  5.     Speaker s = new  Speaker();
  6.     Greeting g = new  Greeting(s);
  7.     }
  8. }


可 以看到這裏的Container類(容器)在初始化的時候會生成一個Speaker對象和一個Greeting對象,並且維持了它們的關係,當系統要用這 些對象的時候,直接問容器要就可以了。這就是容器最基本的功能,維護系統中的實例(對象)。如果到這裏你還是感到模糊的話,別擔心,我後面還會有相關的解 釋。

2、輕量級與重量級
所謂“重量級”是相對於“輕量級”來講的,也可以說“輕量級”是相對於重量級來講的。在Spring出現 之前,企業級開發一般都採用EJB,因爲它提供的事務管理,聲明式事務支持,持久化,分佈計算等等都“簡化”了企業級應用的開發。我這裏的“簡化”打了雙 引號,因爲這是相對的。重量級容器是一種入侵式的,也就是說你要用EJB提供的功能就必須在你的代碼中體現出來你使用的是EJB,比如繼承一個接口,聲明 一個成員變量。這樣就把你的代碼綁定在EJB技術上了,而且EJB需要JBOSS這樣的容器支持,所以稱之爲“重量級”。
相對而言“輕量級”就是 非入侵式的,用Spring開發的系統中的類不需要依賴Spring中的類,不需要容器支持(當然Spring本身是一個容器),而且Spring的大小 和運行開支都很微量。一般來說,如果系統不需要分佈計算或者聲明式事務支持那麼Spring是一個更好的選擇。

二、    幾個核心概念
在我看來Spring的核心就是兩個概念,反向控制(IoC),面向切面編程(AOP)。還有一個相關的概念是POJO,我也會略帶介紹。
1、POJO
我 所看到過的POJO全稱有兩個,Plain Ordinary Java Object,Plain Old Java Object,兩個差不多,意思 都是普通的Java類,所以也不用去管誰對誰錯。POJO可以看做是簡單的JavaBean(具有一系列Getter,Setter方法的類)。嚴格區分 這裏面的概念沒有太大意義,瞭解一下就行。
2、    IoC
IoC的全稱是Inversion of Control,中文翻譯反向控 制或者逆向控制。這裏的反向是相對EJB來講的。EJB使用JNDI來查找需要的對象,是主動的,而Spring是把依賴的對象注入給相應的類(這裏涉及 到另外一個概念“依賴注入”,稍後解釋),是被動的,所以稱之爲“反向”。先看一段代碼,這裏的區別就很容易理解了。
代碼片段2:

  1. public  void  greet()
  2. {
  3. Speaker s = new  Speaker();
  4. s.sayHello();
  5. }


代碼片段3:

  1. public  void  greet()
  2. {
  3. Speaker s = (Speaker)context.lookup("ejb/Speaker" );
  4. s.sayHello();
  5. }


代碼片段4:

  1. public  class  Greeting 
  2. {
  3.     public  Speaker s;
  4.     public  Greeting(Speaker s)
  5.     {
  6.         this .s = s;
  7.     }
  8.     public  void  greet()
  9.     {
  10.         s.sayHello();
  11.     }
  12. }

 

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

剖析Spring容器的作用及實現方式

,Spring在其中是一個非常重要的框架

,Spring在其中是一個非常重要的框架      們 在使用ssh整合項目的時候,Spring在其中是一個非常重要的框架,它在其中可以說是一個最核心的框架,提到spring我們不得不提它的IOC容器 的功能了!它是一個大工廠,可以在其中產生和管理很多的bean,下面,請隨阿堂一起來好好看看spring的容器功能方面的介紹,這對於我們在解決 ssh框架整合中的問題,進行測試時是非常有用的!

bsp;我們在使用ssh整合項目的時候 1.spring容器
    Spring 有兩個核心接口BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子 接口,它們代表了Spring容器,Spring容器是產生Bean的工廠,用於管理容器中的Bean。Bean是Spring管理的基本單位,在 spring的J2EE應用中,所有的組件都是Bean。Bean包括數據源、Hibernate的SessionFactory、事務管理器等。

,它在其中可以說是一個最核心的框架,提到

     應 用中的所有組件,都處於spring的管理下,都被spring以Bean的方式管理,spring負責創建Bean實例,並管理其生命週期。 Spring裏的Bean是非常廣義的概念,任何Java對象和Java組件都被當成Bean處理,甚至這些組件,並不是標準的JAVABEAN。
    Bean在spring容器中運行,無須感受Spring容器的存在,一樣可以接受spring的信賴注入,包括Bean屬性的注入、合作者的注入、信賴關係的注入等。
spring容器負責創建Bean實例,所以需要知道每個Bean的實現類,JAVA程序的實現面向接口編程,無須關心Bean實例的實現。但Spring容器必須能精確知道每個Bean的實現類,因此Spring配置文件必須精確配置Bean的實現類。

,Spring在其中是一個非常重要的框架

 

   Spring容器最基本的接口就是BeanFactory.BeanFactory負責配置、創建、管理Bean,它有一個子接口ApplicationContext,因此也稱爲Spring上下文。Spring容器負責管理Bean與Bean之間的信賴關係。

spring我們不得不提它的IOC容器的

BeanFactory接口包含如下基本的方法:
,它在其中可以說是一個最核心的框架,提到 public boolean containsBean(Stringname),判斷Spring容器是否包含id爲name的Bean定義
public Object getBean(String name)返回容器id爲name的bean
public Object getBean(String name,ClassrequiredType)返回容器中id爲name,並且類型爲requiredType的Bean,它在其中可以說是一個最核心的框架,提到
public Class getType(String name)返回容器中id爲name的Bean的類型

   調用者只需使用getBean方法即可獲得指定Bean的引用,無須關心Bean的實例化過程,即Bean實例的創建過程完全透明。

   BeanFactory有很多實現類,通常使用spring我們不得不提它的IOC容器的 org.springframework.beans.factory.xml.XmlBeanFactory 類。但對於大部分J2EE應用而言,推薦使用ApplicationContext.ApplicationContext是BeanFactory的子接口,其常用實現類是

org.springframework.context.support.FileSystemXmlApplicationContext和

,Spring在其中是一個非常重要的框架

org.springframework.context.support.ClassXmlAplicationContext.

    創 建 BeanFactory實例時,必須提供Spring容器管理的Bean的詳細配置信息。Springr的配置信息通常採用XML配置文件來設置,因此, 創建BeanFactory實例時,應該提供XML配置文件作爲參數。XML配置文件通常使用Resource對象傳入

   &n

 

Resource接口用於訪問配置文件資源
,它在其中可以說是一個最核心的框架,提到     大部分j2ee應用,可在啓動web應用時自動加載ApplicationContext實例,接受Spring管理的Bean無須知道ApplicationContext的存在,一樣可以利用ApplicationContext的管理。

,它在其中可以說是一個最核心的框架,提到 對於獨立的應用程序,也可以通過如下方法來實例化BeanFactory

 

,Spring在其中是一個非常重要的框架 //搜索當前文件路徑下的beans.xml文件創建Resource對象
InputStreamResource isr=new FileSystemResource(is);
//以Resource對象作爲參數,創建BeanFactory的實例   &n
XmlBeanFactory factory=new XmlBeanFactory(isr);

 

spring我們不得不提它的IOC容器的 或者採用如下方法

   &n
//搜索CLASSPATH路徑,以CLASSPATH路徑下的beans.xml文件創建Resource對象
ClassPathResource res=new ClassPathResource("beans.xml");bsp;我們在使用ssh整合項目的時候
//以Resource 對象作爲參數,創建BeanFactory實例
XmlBeanFactory factory=new XmlBeanFactory(res);

 

,它在其中可以說是一個最核心的框架,提到

    如果應用裏有多個屬性配置文件,則應該採用BeanFactory的子接口ApplicationContext來創建BeanFactory的實例,ApplicationContext通常採用如下兩個實現類。

,它在其中可以說是一個最核心的框架,提到

FileSystemXmlApplicationContext,以指定路徑的XML配置文件創建ApplicationContext
ClassPathXmlApplicationContext,以CLASSPATH路徑下的XML配置文件創建ApplicationContext

,Spring在其中是一個非常重要的框架

 

bsp;我們在使用ssh整合項目的時候 如果需要同時加載多個XML配置文件,可以採用如下方式

//搜索CLASSPATH路徑,以CLASSPATH路徑下的applicationContext.xml 和service.xml文件創建ApplicationContext   &n
ClassPathXmlApplicationContext appContext=newClassPathXmlApplicationContext(
 new String[]{"applicationContext.xml","service.xml"});

spring我們不得不提它的IOC容器的 //事實上,ApplicationContext是BeanFactory的子接口,支持強制類型轉換
BeanFactory factory=(BeanFactory) appContext;

 

,Spring在其中是一個非常重要的框架

當然,也可以支持從指定的路徑來搜索特定文件加載:

spring我們不得不提它的IOC容器的


//以指定路徑下的applicationContext.xml和service.xml文件創建Applicationcontext   &n
FileSystemXmlAplicationContext appContext=new
FileSystemXmlApolicationContext(
 new String[]{"applicationContext.xml","service.xml"},Spring在其中是一個非常重要的框架
)
//事實上,ApplicationContext是BeanFactory的子接口,支持強制類型轉換
BeanFactory factory=(BeanFactory) appContext;

spring我們不得不提它的IOC容器的


,Spring在其中是一個非常重要的框架 2.使用ApplicationContext
   很 多時候,並不是直接使用BeanFactory實例作爲Spring容器,而是使用ApplicationContext實例。因此,有時候也稱 Spring容器爲Spring上下文。ApplicationContext是BeanFactory接口的子接口,它增強了BeanFactory的 功能。
   ApplicationContext允許以聲明方式操作容器,無須手動創建它。可利用如ContextLoader的支持類,在web應用啓動自動創建ApplicationContext。當然,也可以採用編程方式創建ApplicationContext

,Spring在其中是一個非常重要的框架

 

ApplicationContext繼承MessageSource接口,因此提供國際化支持資源訪問,比如URL和文件,Spring在其中是一個非常重要的框架
事件傳遞
載入多個配置文件

   ApplicationContext包括 BeanFactory的全部功能,因此建議優先使用ApplicationContext,除了對於某些內存非常關鍵的作用,才考慮使用BeanFactoryspring我們不得不提它的IOC容器的

 

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