Time of Update: 2018-12-04
當兩個singleton範圍Bean存在依賴關係時,或prototype範圍Bean依賴singleton範圍Bean時,不會有任何問題。但當singleton範圍Bean依賴prototype範圍Bean時,singleton範圍Bean只有一次初始化的機會,它的依賴關係也只在初始化階段被設定,它所依賴的prototype範圍Bean則需要每次都得到一個全新的Bean執行個體,這將會導致singleton範圍的Bean的依賴得不到即時更新。singleton Bean依賴於prototype
Time of Update: 2018-12-04
Spring架構絕大部分工作都集中在 對容器中Bean的管理 上,包括管理容器中Bean的生命週期,使用Bean繼承等特殊功能。通過這些深入的管理,應用程式可以更好地使用這些Java組件。所有
Time of Update: 2018-12-04
小引:Spring架構提供了很好的擴充性,除了可以與各種第三方架構良好整合外,其IOC容器也允許開發人員進行擴充,這種擴充甚至無須實現BeanFactory或ApplicationContext介面,而是允許通過兩個後處理器對IOC容器進行擴充。Spring提供了兩種常用的後處理器:① Bean後處理器:這種後處理器會對容器中的Bean進行後處理,對Bean功能進行額外加強。②
Time of Update: 2018-12-04
hibernate.cfg.xml :<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><
Time of Update: 2018-12-04
除了上篇文章討論的Bean後處理器,Spring還提供了一種容器後處理器。Bean後處理器負責處理容器中的所有Bean執行個體,而容器後處理器則負責處理容器本身。容器後處理器必須實現 BeanFactoryPostProcessor 介面,該介面中有一個方法:void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException實現該方法的方法體就是對Spring容器進行的處理,
Time of Update: 2018-12-04
Spring同時支援編程式事務策略和聲明式事務策略,在實際開發中,幾乎都採用聲明式事務策略。使用 聲明式事務策略的優勢 十分明顯:① 聲明式事務能大大降低開發人員的代碼書寫量,而且聲明式事務幾乎不影響應用的代碼。因此,無論底層事務策略如何變化,應用程式都無須任何改變。② 應用程式代碼無須任何交易處理代碼,可以更關注於商務邏輯的實現。③ Spring可對任何POJO的方法提供交易管理,而且Spring的聲明式交易管理無須容器的支援,可在任何環境下使用。④
Time of Update: 2018-12-04
hibernate.cfg.xml :<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><
Time of Update: 2018-12-04
Spring1.x 的聲明式事務使用TransactionProxyFactoryBean配置策略簡單易懂,但是配置起來極為繁瑣:每個目標Bean都需要額外配置一個TransactionProxyFactoryBean代理,這種方式將導致設定檔急劇增加。Spring 2.x 的XML Schema方式提供了更簡潔的事務配置策略,Spring2.x提供了tx命名空間來配置交易管理,tx命名空間下提供了<tx:advice.../>
Time of Update: 2018-12-04
public class Jdbc {public static void main(String[] args) {Connection conn=null;Statement stmt=null;ResultSet rs=null;try
Time of Update: 2018-12-04
訪問目標方法 最簡單的做法就是定義增強處理方法時將第一個參數定義為JoinPoint類型,當該增強處理方法被調用時,該JoinPoint參數就代表了織入增強處理的連接點。JoinPoint裡包含了如下幾個常用的方法:Object[ ] getArgs( )返回執行目標方法時的參數Signature getSignature( )返回被增強方法的相關資訊Object getTarget( )返回被織入增強處理的目標對象Object getThis(
Time of Update: 2018-12-04
C3P0 串連池的效能比之DBCP要更勝一籌,Hibernate就推薦使用該串連池。C3P0串連池不僅可以自動清理不再使用的Connection,還可以自動清理Statement和ResultSet。import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import
Time of Update: 2018-12-04
JDBC2.0 規範引入了資料庫連接池技術。JDBC的資料庫連接池使用 javax.sql.DataSource介面來表示,該介面通常由商用伺服器(如WebLogic、WebSphere)等提供實現,也有一些開源組織提供實現(如DBCP、C3P0)。DataSource 通常被稱為資料來源,它包含串連池和串連池管理兩個部分,但習慣上我們也經常把DataSource稱為串連池。DBCP 串連池依賴另一個開源系統:commons-pool.jar。import
Time of Update: 2018-12-04
Spring AOP 採用和 AspectJ 一樣的優先順序來織入增強處理:在進入連接點時,高優先順序的增強處理將先被織入;在退出連接點時,高優先順序的增強處理會後被織入。當不同的切面裡的兩個增強處理需要在同一個連接點被織入時,Spring AOP將以隨機的順序來織入這兩個增強處理。如果應用需要指定不同切面類裡增強處理的優先順序,Spring提供了如下兩種解決方案:① 讓切面類實現org.springframework.core.Ordered介面,實現該介面只需實現一個int
Time of Update: 2018-12-04
AOP 專門用於處理系統中分佈於各個模組(不同方法)中的交叉關注點問題,在JavaEE應用中,常常通過AOP來處理一些具有橫切性質的系統級服務,如交易管理、安全檢查、緩衝、對象池管理等,AOP已經成為一種非常常用的解決方案。AspectJ:AspectJ是一個基於Java語言的AOP架構,提供了強大的AOP功能,其他很多AOP架構都借鑒或採納了它的一些思想。由於Spring3.0的AOP與AspectJ進行了很好的整合,因此掌握AspectJ是學習Spring
Time of Update: 2018-12-04
與定製初始化行為相似,Spring也提供兩種方法定製Bean執行個體銷毀之前的行為:① 使用destroy-method屬性:destroy-method屬性指定某個方法在Bean銷毀之前被自動執行。使用這種方式,不需要將代碼與Spring的介面耦合,代碼汙染小。② 實現DisposableBean介面:該介面提供了一個方法,void destroy( ) throws Exception,該方法就是Bean執行個體被銷毀之前應該執行的方法。Axe.java :public interface
Time of Update: 2018-12-04
Spring 還允許將事務配置放在Java類中定義,這需要藉助於@Transactional註解,該註解既可用於修飾Spring Bean類,也可用於修飾Bean類中的某個方法。使用@Transactional修飾Bean類,表明這些事務設定對整個Bean類起作用;使用@Transactional修飾Bean類中的某個方法,表明這些事務設定只對該方法有效。使用@Transactional
Time of Update: 2018-12-04
我們在C盤下寫一個Hello.java :package lee;public class Hello{public static void main(String[] args){Hello h=new Hello();h.sayHello();}public void sayHello(){System.out.println("Hello AspectJ !");}}編譯運行:沒有任何問題,程式的輸出正是我們想要的。假設現在客戶需要在執行sayHello(
Time of Update: 2018-12-04
實際開發中,項目多數會選擇使用Spring整合Struts2架構。對於使用Spring架構的Web應用,我們不能手動建立Spring容器,而是通過設定檔,聲明式地建立Spring容器。為了讓Spring容器隨著Web應用的啟動而自動地建立起來,可以藉助於ServletContextListener監聽器完成,該監聽器可以在Web應用啟動時回調自訂方法從而建立Spring容器。Spring提供了一個ContextLoaderListener,該監聽器類實現了ServletContextListen
Time of Update: 2018-12-04
小引:如果安裝了Java的反編譯工具,可以反編譯上篇文章中的Hello.class檔案,我們將會發現該Hello.class檔案不是由Hello.java檔案編譯得到的,該Hello.class裡新增了很多內容------這表明AspectJ在編譯時間已增強了Hello.class類的功能,因此AspectJ 通常被稱為編譯時間增強AOP架構。與AspectJ相對的還有另外一種AOP架構,它們不需要在①編譯時間對目標類進行增強,而是②運行時產生目標類的代理類,該代理類要麼與目標類實現相同的介面,
Time of Update: 2018-12-04
Spring中AOP代理由Spring的IOC容器負責產生、管理,其依賴關係也由IOC容器負責管理。因此,AOP代理可以直接使用容器中的其他Bean執行個體作為目標,這種關係可由IOC容器的依賴注入提供。Spring預設使用Java動態代理來建立AOP代理,這樣就可以為任何介面執行個體建立代理了。Spring也可以使用CGLIB代理,在需要代理類而不是代理介面的時候,Spring會自動切換為使用CGLIB代理。但Spring推薦使用面向介面編程,因此業務對象通常都會實現一個或多個介面,此時預設將