Spring(一),Spring(

來源:互聯網
上載者:User

Spring(一),Spring(

一、 spring是什麼?

我們知道struts 是 web 架構 (jsp/action/actionfrom)。hibernate 是 orm架構,處於持久層。

spring 是容器架構,用於配置bean,並維護bean之間關係的架構。

spring中非常重要的概念:

bean (是java中的任何一種對象 javabean/service/action/資料來源./dao

ioc(控制反轉 inverse of control)

di( dependency injection 依賴注入)

 

二、 快速入門

開發一個spring項目.

1.引入spring的開發包(最小配置spring.jar 該包把常用的jar都包括, 還要 寫日誌包 common-logging.jar

2.建立spring的一個核心檔案(容器檔案) applicationContext.xml, [hibernate有核心 hibernate.cfg.xml struts核心檔案 struts-config.xml], 該檔案一般放在src目錄下,該檔案中引入 xsd檔案 :可以從給出的案例中拷貝一份.

3.配置bean

<!-- 在容器檔案中配置bean(service/dao/domain/action/資料來源) -->

<!-- bean元素的作用是,當我們的spring架構載入時候,spring就會自動的建立一個bean對象,並放入記憶體

UserService userSerivce=new UserService();

userSerivce.setName("韓順平");

-->

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

<!-- 這裡就體現出注入的概念. -->

<property name="name">

       <value>韓順平</value>

</property>

</bean>

4.在Test.java中,我們怎麼使用

//我們現在使用spring來完成上面的任務

              //1.得到spring 的applicationContext對象(容器物件)

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

              UserService us=(UserService) ac.getBean("userService");

              us.sayHello();

討論:

傳統的方法和使用spring的方法

1.使用spring ,沒有new 對象,我們把建立對象的任務交給spring架構

2.spring的運行原理圖:

總結:

spring實際上是一個容器架構,可以配置各種bean(action/service/domain/dao),並且可以維護bean與bean的關係,當我們需要使用某個bean的時候,我們可以getBean(id),使用即可.

ioc是什麼?

答 :ioc(inverse of controll ) 控制反轉: 所謂控制反轉就是把建立對象(bean),和維護對象(bean)的關係的權利從程式中轉移到spring的容器(applicationContext.xml),而程式本身不再維護.

DI是什麼?

答: di(dependency injection) 依賴注入: 實際上di和ioc是同一個概念,spring設計者認為di更準確表示spring核心技術

注意:Applicationcontext是一個重量級對象,所以要把Applicationcontext做成一個單例的。

 

三、spring與介面編程

 spring開發提倡介面編程,配合di技術可以層與層的解耦

舉例說明:

現在我們體驗一下spring的di配合介面編程的,完成一個字母大小寫轉換的案例思路:

在業務層中使用介面調用方式,改變Spring容器中的配置切換不同的介面實現方式即可改變商務邏輯而不需要改變業務層的代碼。

通過上面的案例,我們可以初步體會到di配合介面編程,的確可以減少層(web層) 和 業務層的耦合度.

 

四、從ApplicationContext 應用上下文容器中擷取bean和從bean工廠容器中擷取bean

具體案例:

//從ApplicationContext中取bean

ApplicationContext ac=new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");

//當我們去執行個體化beans.xml,該檔案中配置的bean被執行個體(該bean scope是 singleton)從bean中取出student        

       

//如果我們使用beanfactory去擷取bean,當你只是執行個體化該容器, 那麼

      //容器的bean不被執行個體化,只有當你去使用getBean某個bean時,才會即時的建立.       

              BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/hsp/ioc/beans.xml"));

              factory.getBean("student");

結論:

1.如果使用ApplicationContext ,則配置的bean如果是 singleton (非singleton則不會)不管你用不用,都被執行個體化.(好處就是可以積極式載入,缺點就是耗記憶體)

2.如果是 BeanFactory ,則當你擷取beanfacotry時候,配置的bean不會被馬上執行個體化,當你使用的時候,才被執行個體(好處節約記憶體,缺點就是速度)

3.規定: 一般沒有特殊要求,應當使用ApplicatioContext完成

 

三種擷取ApplicationContext 對象引用的方法

1.ClassPathXmlApplicationContext -> 通過類路徑

2.FileSystemXmlApplicationContext -> 通過檔案路徑

舉例:

ApplicationContext ac=new FileSystemXmlApplicationContext("檔案路徑beans.xml / applicationContext.xml");

D:\\myspringsrc\\com\\hsp\\ioc\\beans.xml 要用絕對路徑

3.XmlWebApplicationContext  當tomcat啟動的時候載入

 

五、bean的生命週期

為什麼總是一個生命週期當做一個重點?

Servlet -> servlet生命週期 init() destory()

①  執行個體化(當我們的程式載入beans.xml檔案),把我們的bean(前提是scope=singleton)執行個體化到記憶體(spring 容器)

②  調用set方法設定屬性

③  如果你實現了bean名字關注介面(BeanNameAware) 則,可以通過setBeanName擷取id號(bean的名字)

④  如果你實現了 bean工廠關注介面,(BeanFactoryAware),則可以擷取BeanFactory

如果是單例模式bean工廠在每個bean建立的時候都建立一次。

如果是prototype模式bean工廠則只會建立一次。

⑤  如果你實現了 ApplicationContextAware介面,則調用方法

 如果bean 和 一個後置處理器關聯,則會自動去調用 Object postProcessBeforeInitialization方法

⑦  如果你實現InitializingBean 介面,則會調用 afterPropertiesSet

⑧  如果自己在<bean init-method=”init” /> 則可以在bean定義自己的初始化方法.

 如果bean 和 一個後置處理器關聯,則會自動去調用 Object postProcessAfterInitialization方法

⑩ 使用我們的bean

其中非常有價值的是⑥⑨ 面向切面編程。相當於一個filter過濾器。配置關聯之後將對所有的bean有效。

 

11. 容器關閉

12. 可以通過實現DisposableBean 介面來調用方法 destory

13. 可以在<bean destory-method=”fun1”/> 調用定製的銷毀方法

 

小結: 我們實際開發中往往,沒有用的這麼的過程,常見的是:

1->2->6->9->10->11 

 

問題:通過BeanFactory來擷取bean對象,bean的生命週期是否和Applicationcontext 是一樣嗎?

 

不是一樣的,bean是工廠中建立的生命週期會簡單一些:

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.