Time of Update: 2018-12-04
Being.java :public interface Being {public void testBeing();}Dog.java :public class Dog implements Being {private String msg;public void setMsg(String msg) {this.msg = msg;}@Overridepublic void testBeing()
Time of Update: 2018-12-04
Person.java :public interface Person {public String sayHello(String name);public String sayGoodBye(String name);}Chinese.java :public class Chinese implements Person {@Overridepublic String sayGoodBye(String name) {return
Time of Update: 2018-12-04
Spring可以管理 singleton範圍 Bean的生命週期,Spring可以精確地知道該Bean何時被建立、何時被初始化完成、容器何時準備銷毀該Bean執行個體。對於 prototype範圍 的Bean,Spring容器僅僅負責建立,當容器建立了Bean執行個體之後,Bean執行個體完全交給用戶端代碼管理,容器不再跟蹤其生命週期。每次用戶端請求prototype範圍的Bean時,Spring都會產生一個新的執行個體,Spring容器無從知道它曾經建立了多少個prototype範圍Bean,
Time of Update: 2018-12-04
如果某個Bean所依賴的Bean不想被Spring容器直接存取,可以使用嵌套Bean。<bean.../>元素用來定義嵌套Bean,嵌套Bean只對嵌套它的外部Bean有效,Spring容器無法直接存取嵌套Bean,因此定義嵌套Bean時無須指定id屬性:Axe.java :public interface Axe {public String chop();}Person.java :public interface Person {public void
Time of Update: 2018-12-04
如果Bean的屬性是個集合,則可以使用集合元素<list.../> 、<set.../> 、<map.../>和<props.../>元素分別用來設定類型為List、Set、Map和Properties的集合屬性值。Axe.java :public interface Axe {public String chop();}StoneAxe.java :public class StoneAxe implements Axe
Time of Update: 2018-12-04
當在設定檔中為Bean屬性指定值時,還可以使用組合屬性名稱的方式。例如我們使用如foo.bar.name的屬性名稱,這表明為Bean執行個體的foo屬性的bar屬性的name屬性指定值。Person.java :public class Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}ExampleBean.
Time of Update: 2018-12-04
大部分時候,我們都不會使用BeanFactory執行個體作為Spring容器,而是使用ApplicationContext執行個體作為容器,因此我們也將Spring容器稱為Spring上下文。ApplicationContext是BeanFactory介面的子介面,它增強了BeanFactory的功能。ApplicationContext允許以聲明式方式操作容器,無須手動建立它。可利用如ContextLoader的支援類,在Web應用啟動時自動建立ApplicationContext。當然也可以
Time of Update: 2018-12-04
Spring容器對Bean沒有特殊要求,甚至不要求該Bean像標準的JavaBean那樣必須為每個屬性提供對應的getter和setter方法。Spring中的Bean是Java執行個體、Java組件;而傳統的Java應用中的JavaBean通常作為DTO(資料轉送對象),用來封裝值對象,在各層之間傳遞資料。雖然Spring對Bean沒有特殊要求,但還是建議Spring中的Bean應該盡量滿足如下幾個原則:① 盡量為每個Bean實作類別提供無參數的構造器。②
Time of Update: 2018-12-04
縱觀所有的Java應用,它們都是一種典型的依賴型應用,也就是由一些互相協作的對象構成的。Spring把這種互相協作的關係稱為依賴關係。譬如A組件調用了B組件的方法,我們可稱A組件依賴於B組件。使用依賴注入,不僅可以為Bean注入普通的屬性值,還可以注入其他Bean的引用。通過這種依賴注入,JavaEE應用中的各種組件不需要以寫入程式碼方式耦合在一起,甚至無須使用原廠模式。依賴注入達到的效果,非常類似於傳說中的共產主義,當某個Java執行個體需要其他Java執行個體時,系統自動提供所需要的執行個體
Time of Update: 2018-12-04
設值注入是指IOC容器使用屬性的setter方法來注入被依賴的執行個體。這種注入方式簡單,直觀,因而在Spring的依賴注入裡大量使用。Spring推薦面向介面編程,這樣可以更好地讓規範和實現分離,從而提供更好的解耦。對於一個JavaEE應用,不管是DAO組件,還是商務邏輯組件,都應該先定義一個介面,該介面定義了該組件應該實現的功能,但功能的實現則由其實作類別提供。Person.java :public interface Person {public void
Time of Update: 2018-12-04
構造注入指的是在構造執行個體時,已經為其完成了依賴關係的初始化。這種利用構造器來設定依賴關係的方式,稱為構造注入。Chinese.java :public class Chinese implements Person {private Axe axe;public Chinese() {}public Chinese(Axe axe) {this.axe = axe;}@Overridepublic void useAxe() {System.out.println(axe.chop());}
Time of Update: 2018-12-04
前面所有的Hibernate應用使用Session時都用到了HibernateUtil工具類,因為該工具類可以保證將線程不安全的Session綁定限制在當前線程內------也就是實現一種上下文相關的Session。public class HibernateUtil{public static final SessionFactory
Time of Update: 2018-12-04
Session層級的一級緩衝是局部緩衝,它只對當前Session有效;SessionFactory層級的二級緩衝是全域緩衝,它對所有的Session都有效。==============================================================================================================================對於Session層級的一級緩衝而言,所有經它操作的實體,不管使用save()、update
Time of Update: 2018-12-04
SessionFactory層級的二級緩衝是全域性的,應用的所有Session都共用這個二級緩衝。不過二級緩衝預設是關閉的,必須由程式顯式開啟。一旦在程式中開啟了二級緩衝,當Session需要抓取資料時,Session將會優先從二級緩衝抓取。Person.hbm.xml :<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
Time of Update: 2018-12-04
類似於一級緩衝,Hibernate同樣提供了方法來操作SessionFactory的二級緩衝所緩衝的實體:SessionFactory提供了一個getCache( )方法,該方法的傳回值是Cache對象,通過該對象即可操作二級緩衝中的實體、集合等。例如如下程式碼片段:Cache
Time of Update: 2018-12-04
bean.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:context="http://www.springframework.org/schema/context"
Time of Update: 2018-12-04
Hibernate包括兩個層級的緩衝:① 預設總是啟用的Session層級的一級緩衝。②
Time of Update: 2018-12-04
兩種依賴注入方式,沒有絕對的好壞,只是適應的情境有所不同。相比之下,設值注入具有如下的優點:① 與傳統的JavaBean的寫法更相似,程式開發人員更容易理解、接受。通過setter方法設定依賴關係顯得更加直觀,自然。② 對於複雜的依賴關係,如果採用構造注入,會導致構造器過於臃腫,難以閱讀。Spring在建立Bean執行個體時,需要同時執行個體化其依賴的全部執行個體,因而導致效能下降。而使用設值注入,則能避免這些問題。③
Time of Update: 2018-12-04
Spring有兩個核心介面,BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子介面。它們都可代表Spring容器,Spring容器是產生Bean執行個體的工廠,並管理容器中的Bean。Bean是Spring管理的基本單位,在基於Spring的JavaEE應用中,所有的組件都被當成Bean處理,包括資料來源,Hibernate的SessionFactory、交易管理員等。應用中的所有組件,都處於Spring的管理下,都
Time of Update: 2018-12-04
在MyEclipse6.5中建立一個web工程,取名spring2.5.6。將Spring2.5.6分發包下dist目錄下的spring.jar和分發包下的lib->jakarta-commons下的commons-logging.jar拷貝到工程的lib目錄下。在src目錄下建立一個applicationContext.xml檔案,內容參考spring分發包->samples->imagedb->war->WEB-INF下的applicationContext.x