版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、開(kāi)始spring之旅,理解反向控制(IOC) 依賴注入(di):比IOC更好的名字。獲得依賴對(duì)象的方式反轉(zhuǎn)了。 IOC應(yīng)用 理解AOP,ioc或者說(shuō)di,還可以達(dá)到解耦的目的,我們舉一個(gè)案例來(lái)說(shuō)明!(字母大小寫(xiě)轉(zhuǎn)換 ),二、裝配Bean,2.1容納你的bean bean工廠:最簡(jiǎn)單的容器,提供了基礎(chǔ)的依賴 注入支持。創(chuàng)建各種類型的Bean. 應(yīng)用上下文(ApplicationContext):建立在bean工廠基礎(chǔ)之上,提供系統(tǒng)架構(gòu)服務(wù)。, singleton: 單例 默認(rèn)值 prototype: 原型 request: 一次請(qǐng)求有效( java web開(kāi)發(fā)中) session: sess
2、ion級(jí)有效(java web開(kāi)發(fā)中),二、裝配Bean,2.1 容納你的bean 2.1.1 bean工廠介紹 工廠設(shè)計(jì)模式,創(chuàng)建分發(fā)各種bean。配置好它們之 間的寫(xiě)作關(guān)系,參與bean的生命周期。 BeanFactory factory = new XmlBeanFactory( new ClassPathResource(applicationContext.xml); bean工廠只把bean的定義信息載進(jìn)來(lái),用到的時(shí)候 才實(shí)例化。 factory.getBean(mybean);就可得到一個(gè) bean。,二、裝配Bean,2.1 容納你的bean 2.1.2 使用應(yīng)用上下文 App
3、licationCotext,spring更加高級(jí)的容器。功能 強(qiáng)大: 1.提供文本信息解析工具,包括對(duì)國(guó)際化支持。 2.提供載入文件資源的通用方法,如圖片。 3.可以向注冊(cè)為監(jiān)聽(tīng)器的bean發(fā)送事件。 在很少的情況下,使用BeanFactory,如在移動(dòng)設(shè) 備。,二、裝配Bean,2.1 容納你的bean 2.1.2 使用應(yīng)用上下文(續(xù)) 三種經(jīng)常用到的實(shí)現(xiàn): 1.ClassPathXmlApplicationContext:從類路徑中加載。 2.FileSystemXmlApplicationContext:從文件系統(tǒng)加載。 3.XmlWebApplicationContext:從web系
4、統(tǒng)中加載。,二、裝配Bean,2.1 容納你的bean 2.1.2 使用應(yīng)用上下文(續(xù)) ApplicationContext context = new FileSystemXmlApplicationContext( c:foo.xml); ApplicationContext context = new ClassPathXmlApplicationContext( foo.xml);,二、裝配Bean,2.1 容納你的bean 2.1.2 使用應(yīng)用上下文(續(xù)) 除了應(yīng)用上下文提供的附加功能外,應(yīng)用上下文 與bean工廠的另一個(gè)重要區(qū)別是關(guān)于單例bean 如何被加載。 bean工廠延遲加
5、載所有bean,直到getBean() 方法被調(diào)用。 應(yīng)用上下文會(huì)(applicationContext)在啟動(dòng)后預(yù)載入所有單例bean.這樣可確保應(yīng)用不需要等待他們被創(chuàng)建。,二、裝配Bean,2.1 容納你的bean 2.1.3 bean的生命周期 bean被載入到容器中時(shí),他的生命周期就開(kāi)始了。: 1.容器尋找bean的定義信息并實(shí)例化。 2.使用依賴注入,spring按bean定義信息配置bean的所有屬性。 3.若bean實(shí)現(xiàn)了BeanNameAware接口,工廠調(diào)用Bean的setBeanName ()方法傳遞bean的ID。 4.若bean實(shí)現(xiàn)了BeanFactoryAware接口
6、,工廠調(diào)用setBeanFactory() 方法傳入工廠自身。 5.若BeanPostProcessor(bean后置處理器)和bean關(guān)聯(lián),則它們的 postProcessBeforeInitialization()方法被調(diào)用。 過(guò)濾器舉例理解 6.若bean指定了ini-method方法、,它將被調(diào)用。 7.最后,若有BeanPostProcessor和bean關(guān)聯(lián),則它們的 postProcessAfterInitialization()方法被調(diào)用、。,二、裝配Bean,2.1 容納你的bean 2.1.3 bean的生命周期(續(xù)) 將bean從工廠中刪掉有兩種方法: 1.若bean實(shí)現(xiàn)
7、了DisposableBean接口, distroy()方法被調(diào)用。 2.如果指定了定制的銷毀方法,就調(diào)用這個(gè)方法。,二、裝配Bean,2.1 容納你的bean 2.1.3 bean的生命周期(續(xù)),實(shí)例化,設(shè)置屬性值,調(diào)用BeanNameAware的 setBeanName()方法,調(diào)用BeanFactoryAware的 setBeanFactory()方法,調(diào)用BeanPostProcessor的 預(yù)初始化方法(before,調(diào)用InitializingBean的 afterPropertiesSet()方法,調(diào)用調(diào)用定制的初始化方法,調(diào)用BeanPostProcessor的 后初始化方法
8、(after),Bean可以使用了,容器關(guān)閉,調(diào)用DisposableBean的 destory()方法,調(diào)用定制的銷毀方法,Bean在Spring Bean應(yīng)用上下文中的生命周期,調(diào)用ApplicationContextAware 方法setApplicationContext()方法,二、裝配Bean,2.1 容納你的bean 2.1.3 bean的生命周期(續(xù)),實(shí)例化,設(shè)置屬性值,調(diào)用BeanNameAware的 setBeanName()方法,調(diào)用BeanFactoryAware的 setBeanFactory()方法,調(diào)用InitializingBean的 afterPropert
9、iesSet()方法,調(diào)用調(diào)用定制的初始化方法,Bean可以使用了,容器關(guān)閉,調(diào)用DisposableBean的 destory()方法,調(diào)用定制的銷毀方法,Bean在Spring Bean工廠中的生命周期,二、裝配Bean,2.2 基本裝配 在spring容器內(nèi)拼湊bean叫做裝配。裝 配bean的時(shí)候,需要告訴容器哪些bean 以及容器如何使用依賴注入將它們配合在 一起。,二、裝配Bean,2.2 基本裝配 2.2.1 使用XML裝配 xml是最常見(jiàn)的spring應(yīng)用系統(tǒng)配置源。 幾種spring容器都支持使用xml裝配bean,包括: 1.XmlBeanFactory:調(diào)用ClassPa
10、thResource載入上下文 定義文件(比如applicationContext.xml)。 2.ClassPathXmlApplicationContext:從類路徑載 入上下文定義文件。 3.XmlWebApplicationContext:從web應(yīng)用上下文 中載入定義文件。,二、裝配Bean,2.2 基本裝配 2.2.1 使用XML裝配(續(xù)) 上下文定義文件的根元素是.有多 個(gè)子元素。每個(gè)元素定義了一個(gè) bean如何被裝配到spring容器中。 ,二、裝配Bean,2.2 基本裝配 2.2.2 添加一個(gè)bean 對(duì)bean的最基本的配置包括bean的ID和他的 全稱類名。 bean的
11、id是foo。,二、裝配Bean,2.2 基本裝配-scope prototype、singleton、request 、session、global-session spring中的bean缺省情況下是單例模式。始終返回一個(gè)實(shí) 例。若想返回不同的實(shí)例的話需要定義成原型模式。 bean的singleton屬性告訴上下文該bean是否為單例的。缺 省為true。若為false的話,為原型bean。 ,二、裝配Bean,2.2 基本裝配 2.2.2 添加一個(gè)bean(續(xù)) 使用原型bean會(huì)對(duì)性能產(chǎn)生影響,盡量不要設(shè)置為prototype,除非有必要。,二、裝配Bean,2.2 基本裝配 2.2.
12、2 添加一個(gè)bean(續(xù)) 實(shí)例化與銷毀 spring實(shí)例化bean或銷毀bean時(shí),有時(shí)需要作一些處理工作,因此spring可以在創(chuàng)建和拆卸bean的時(shí)候調(diào)用bean的兩個(gè)生命周期方法。 PostConstruct public void ini() PreDestroy public void destroy() ,二、裝配Bean,2.2 基本裝配 2.2.2 添加一個(gè)bean(續(xù)) spring也提供了兩個(gè)接口來(lái)實(shí)現(xiàn)相同的功能: InitializingBean和DisposableBean. InitializingBean接口提供了一個(gè)afterPropertiesSet()方法。
13、 DisposableBean接口提供了destroy(). 不推薦使用該接口,它將你的bean和springAPI邦定在一起。,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴 元素的子元素指明了使用它們的set方法來(lái)注入??梢宰⑷肴魏螙|西,從基本類型到集合類,甚至是應(yīng)用系統(tǒng)的bean。,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 簡(jiǎn)單bean配置 配置bean的簡(jiǎn)單屬性,基本數(shù)據(jù)類型和string。 tom ,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 引用其它bean ,二、裝配Bean,2.2 基
14、本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 內(nèi)部bean 這種方式的缺點(diǎn)是你無(wú)法在其它地方重用這個(gè)bar實(shí) 例,原因是它是專門為foo而用。,二、裝配Bean,2.2 基本裝配 繼承 繼承配置 覆蓋父 Bean配置 可以設(shè)置 的abstract 屬性為 true, Spring 不會(huì)實(shí)例化該Bean,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 裝配集合 若bean的屬性是集合類型,按如下處理: 裝配List和數(shù)組: bar1 ,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 裝配集合 裝配set: set使用方法和list一
15、樣,不同的是對(duì)象被裝配到set 中,而list是裝配到List或數(shù)組中裝配,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 裝配map: key值必須是string的,key-ref可以是其他bean,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 裝配Properties: bar1 bar2 ,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) 若bean的屬性是集合類型,按如下處理: 設(shè)置null: ,二、裝配Bean,2.2 基本裝配 2.2.3 通過(guò)set方法注入依賴(續(xù)) Set注入的替代: se
16、t注入是一種直接方式,也可通過(guò)構(gòu)造函數(shù)設(shè)置一些屬性值。,二、裝配Bean,2.2 基本裝配 2.2.4 通過(guò)構(gòu)造函數(shù)注入依賴 set注入的缺點(diǎn)是無(wú)法清晰表達(dá)哪些屬性是必須的,哪些是可選 的,構(gòu)造注入的優(yōu)勢(shì)是通過(guò)構(gòu)造強(qiáng)制依賴關(guān)系,不可能實(shí)例化不 完全的或無(wú)法使用的bean。, :如果屬性是類類型,則使用 ref=“”,二、裝配Bean,2.3 自動(dòng)裝配 有四種自動(dòng)裝配類型: 1.byName尋找和屬性名相同的bean,若找不到,則裝不上。 2.byType:尋找和屬性類型相同的bean,找不到,裝不上,找到多個(gè)拋異常。 3.constructor:查找和bean的構(gòu)造參數(shù)一致的一個(gè)或 多個(gè)bea
17、n,若找不到或找到多個(gè),拋異常。按照參數(shù)的類型裝配 4.autodetect: (3)和(2)之間選一個(gè)方式。不確定 性的處理與(3)和(2)一致。 5.defualt : 這個(gè)需要在 6.no : 不自動(dòng)裝配,這是autowrite的默認(rèn)值., 說(shuō)明: 不推薦使用,但是作為授課,我們還是要了解這些知識(shí),面試用的上.,二、裝配Bean,2.3 自動(dòng)裝配 2.3.1 處理自動(dòng)裝配的不確定性 使用byType和constructor自動(dòng)裝配時(shí),若找到多個(gè)符合條件的bean,會(huì)報(bào)異常,因此最好的方式是不用自動(dòng)組裝。,二、裝配Bean,2.3 自動(dòng)裝配 2.3.2 混合使用手動(dòng)和自動(dòng)組裝 ,二、裝配B
18、ean,spring2.5 spring2.5提供了配置. 該配置可激活在類中探測(cè)到的各種注解,Required Autowire PostConstrct PreDestroy Resource EJB PersistenceContext WebServiceRef等等, 也可以選擇為這些注解激活單獨(dú)的后處理器. 例如:AutowiredAnnotationBeanPostProcessor(處理自動(dòng)裝配) CommonAnnotationBeanPostProcessor(生命周期等) 注意:該標(biāo)記不能激活事務(wù)處理.需要使用tx:annotation-driven,這個(gè)知識(shí)點(diǎn)很有用,在項(xiàng)
19、目中,我們?cè)倬唧w使用。,二、裝配Bean,2.3 自動(dòng)裝配 2.3.3 缺省自動(dòng)組裝 默認(rèn)不是自動(dòng)組裝。 通過(guò) 可將bean設(shè)置為自動(dòng)組裝。,二、裝配Bean,2.4 使用spring的特殊bean 讓spring特殊對(duì)待這些bean。使它們可以: 1.通過(guò)配置后加工bean,涉及到Bean和Bean工廠生命 周期。 2.改變依賴注入,將字符串轉(zhuǎn)換成其它類型。 3.從屬性文本裝載信息,包括信息國(guó)際化。 4.監(jiān)聽(tīng)并處理其它bean及spring發(fā)布的系統(tǒng)消息。 5.知道自己在spring中的唯一表識(shí)。,二、裝配Bean,2.4 使用spring的特殊bean 2.4.1 對(duì)bean進(jìn)行后處理 B
20、eanPostProcessor接口提供機(jī)會(huì)來(lái)修改bean。 public interface BeanPostProcessor /Bean初始化(調(diào)用afterPropertiesSet()以及Bean的指 /定initmethod方法)之前被調(diào)用。 Object postProcessorBeforeInitialation(); /在初始化之后馬上調(diào)用 Object postProcessorAfterInitialization(); ,二、裝配Bean,2.4 使用spring的特殊bean 2.4.1 對(duì)bean進(jìn)行后處理(續(xù)) 注冊(cè)后處理Bean 如果使用的是Bean工廠,需要
21、調(diào)用工廠的addBeanPostProcessor()來(lái)注冊(cè). factory.addBeanPostProcessor(); 如果使用的是上下文同其他Bean一樣: ,二、裝配Bean,2.4 使用spring的特殊bean 2.4.2 對(duì)bean工廠進(jìn)行后處理 BeanPostProcessor在bean載入后,對(duì)bean進(jìn)行一些后處理工作。而B(niǎo)eanFactoryPostProcessor在bean工廠載入所有bean的定義后,實(shí)例化bean之前,對(duì)Bean工廠做一些后處理工作。 public interface BeanFactoryPostProcessor public void
22、postProcessorBeanFactory(); 如果使用的是應(yīng)用上下文不需要將他注冊(cè)為Bean工廠后處理器。上下文會(huì)自動(dòng)注冊(cè)它。按照正常的Bean聲明即可。,二、裝配Bean,2.4 使用spring的特殊bean 2.4.3 分散配置(有兩種方式引入文件) 將配置文件分成幾個(gè)分散的配置文件。如數(shù)據(jù)源。 xx/yy/perties xx/yy/perties ,二、裝配Bean,2.4 使用spring的特殊bean 2.4.3 分散配置(續(xù)) perties database.url= database.driver= datebase.us
23、ername= datebase.password=,二、裝配Bean,2.4 使用spring的特殊bean 2.4.3 分散配置(續(xù)) 使用占位符變量代替bean裝配文件中的硬編碼配置。占位符采 $variable形式。 $database.url . ,二、裝配Bean,2.4 使用spring的特殊bean 2.4.8 感知其他bean 運(yùn)行在spring容器中的bean不知道自己的注冊(cè)名,運(yùn)行在哪里。實(shí)現(xiàn)以下三個(gè)接口: BeanNameAware:知道自己的名字。 BeanFactoryAware:所處的bean工廠。 ApplicationContextAware:所在上下文,二、
24、裝配Bean,2.4 使用spring的特殊bean 2.4.8 感知其他bean(續(xù)) 知道你是誰(shuí) 實(shí)現(xiàn)BeanNameAware接口。無(wú)需為該接口的setBeanName()方法作任何處理,bean被載入時(shí),容器會(huì)自動(dòng)調(diào)用該方法,為其設(shè)置id或name的值。,二、裝配Bean,2.4 使用spring的特殊bean 2.4.8 感知其他bean(續(xù)) 知道你在哪里 實(shí)現(xiàn)BeanFactoryAware(感知)或ApplicationContextAware接口。分別定義了setBeanFactory()和setApplicationContext()方法。,三、創(chuàng)建切面,3.1 AOP介紹
25、,CourseService,CourseService,CourseService,安 全,事 務(wù),其 他,aop原理圖+案例,aop原理圖+案例,三、創(chuàng)建切面,3.1 AOP介紹 3.1.1 定義AOP術(shù)語(yǔ) 1.切面(aspect):要實(shí)現(xiàn)的交叉功能,是系統(tǒng)模塊化的一個(gè)切面或領(lǐng)域。如日志記錄。 2.連接點(diǎn):應(yīng)用程序執(zhí)行過(guò)程中插入切面的地點(diǎn),可以是方法調(diào)用,異常拋出,或者要修改的 字段。 3.通知:切面的實(shí)際實(shí)現(xiàn),他通知系統(tǒng)新的行為。如在日志通知包含了實(shí) 現(xiàn)日志功能的代碼,如向日志文件寫(xiě)日志。通知在連接點(diǎn)插入到應(yīng)用系統(tǒng)中。 4.切入點(diǎn):定義了通知應(yīng)該應(yīng)用在哪些連接點(diǎn),通知可以應(yīng)用到AOP框架
26、支持的任何連接點(diǎn)。 5.引入:為類添加新方法和屬性。 6.目標(biāo)對(duì)象:被通知的對(duì)象。既可以是你編寫(xiě)的類也可以是第三方類。 7.代理:將通知應(yīng)用到目標(biāo)對(duì)象后創(chuàng)建的對(duì)象,應(yīng)用系統(tǒng)的其他部分不用為了支持代理對(duì)象而 改變。 8.織入:將切面應(yīng)用到目標(biāo)對(duì)象從而創(chuàng)建一個(gè)新代理對(duì)象的過(guò)程??椚氚l(fā)生在目標(biāo) 對(duì)象生命周期的多個(gè)點(diǎn)上: 編譯期:切面在目標(biāo)對(duì)象編譯時(shí)織入.這需要一個(gè)特殊的編譯器. 類裝載期:切面在目標(biāo)對(duì)象被載入JVM時(shí)織入.這需要一個(gè)特殊的類載入器. 運(yùn)行期:切面在應(yīng)用系統(tǒng)運(yùn)行時(shí)織入.,通知,程序執(zhí)行,切 入,連接點(diǎn),通知,切 入,三、創(chuàng)建切面,3.1 AOP介紹 3.1.2 SpringAOP實(shí)現(xiàn)
27、用java編寫(xiě)spring通知 在spring中所有的通知都是以java類的形式編寫(xiě)的。切入點(diǎn)定義在配置文件中編寫(xiě),所以切面代碼和配置文件對(duì)我們來(lái)說(shuō)都很熟悉。 對(duì)于其他框架(Aspectj),需要特定的語(yǔ)法編寫(xiě),如果使用的話,還需學(xué)習(xí)新的語(yǔ)言。,三、創(chuàng)建切面,3.1 AOP介紹 3.1.2 SpringAOP實(shí)現(xiàn)(續(xù)) spring的運(yùn)行時(shí)通知對(duì)象 spring在運(yùn)行期創(chuàng)建代理,不需要特殊的編譯器. spring有兩種代理方式: 1.若目標(biāo)對(duì)象實(shí)現(xiàn)了若干接口,spring使用JDK的 java.lang.reflect.Proxy類代理。該類讓spring動(dòng)態(tài)產(chǎn)生 一個(gè)新類,它實(shí)現(xiàn)了所需的接口
28、,織入了通知,并且代理對(duì) 目標(biāo)對(duì)象的所有請(qǐng)求。 2.若目標(biāo)對(duì)象沒(méi)有實(shí)現(xiàn)任何接口,spring使用 CGLIB庫(kù)生成目標(biāo)對(duì)象的子類。使用該方式時(shí)需要注意: 1.對(duì)接口創(chuàng)建代理優(yōu)于對(duì)類創(chuàng)建代理,因?yàn)闀?huì)產(chǎn)生更加松耦合的系統(tǒng)。 對(duì)類代理是讓遺留系統(tǒng)或無(wú)法實(shí)現(xiàn)接口的第三方類庫(kù)同樣可以得到通知, 這種方式應(yīng)該是備用方案。 2.標(biāo)記為final的方法不能夠被通知。spring是為目標(biāo)類產(chǎn)生子類。任何需要 被通知的方法都被復(fù)寫(xiě),將通知織入。final方法是不允許重寫(xiě)的。 spring實(shí)現(xiàn)了aop聯(lián)盟接口。 spring只支持方法連接點(diǎn):不提供屬性接入點(diǎn),spring的觀點(diǎn)是屬性攔截破壞了 封裝。面向?qū)ο蟮母拍?/p>
29、是對(duì)象自己處理工作,其他對(duì)象只能通過(guò)方法調(diào)用的得到的 結(jié)果。,三、創(chuàng)建切面,3.2 創(chuàng)建通知,三、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.1 前置通知 public interface MethodBeforeAdvice void before(Method m,Object os ,Object target) 該接口提供了獲得目標(biāo)方法、參數(shù)和目標(biāo)對(duì)象的機(jī)會(huì)。不能夠改變運(yùn)行時(shí)參數(shù),即不能替換參數(shù)對(duì)象和目標(biāo)對(duì)象。 注意在方法結(jié)束后不返回任何值東西。原因是該接口返回后,目標(biāo)方法將會(huì)被調(diào)用,應(yīng)該返回目標(biāo)對(duì)象的返回值。該接口唯一能 阻止目標(biāo)方法被調(diào)用的途徑是拋出異常或(System.exit()。,三
30、、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.1 前置通知(續(xù)),public class WelcomeAdvice implements MethodBeforeAdvice public void before(Method m,Object os,Object target) Customer c = (Customer)arg0; System.out.println(c.getName(); - /創(chuàng)建目標(biāo)代理對(duì)象 KwikEMart welcomeAdvice ,三、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.1 前置通知(續(xù)) ProxyFactoryBean是一個(gè)在BeanFactory中顯
31、式創(chuàng)建代理對(duì)象的中心類,可以給它一個(gè) 要實(shí)現(xiàn)的接口、一個(gè)要代理的目標(biāo)對(duì)象、一個(gè) 要織入的通知,并且他將創(chuàng)建一個(gè)嶄新的代理 對(duì)象。,三、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.2 后置通知 同前置通知類似。 public interface AfterReturningAdvice public void afterReturning(Object returnValue,Method m,Object os,Object target); ,三、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.3 環(huán)繞通知 public interface MethodInterceptor extends Intercept
32、or Object invoke(MethodInvocation invocation); 該接口同前兩種通知有兩個(gè)重要區(qū)別:1.該通知能夠控制目標(biāo)方法 是否真的被調(diào)用。通過(guò)ceed()方法來(lái)調(diào)用。 2.該通知可以控制返回的對(duì)象??梢苑祷匾粋€(gè)與proceed()方法返回對(duì)象完全不同的對(duì)象。但要謹(jǐn)慎使用。,三、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.4 異常通知 public interface ThrowsAdvice 該接口為標(biāo)識(shí)性接口,沒(méi)有任何方法,但實(shí)現(xiàn)該接口的類必須要有如下形 式的方法: void afterThrowing(Throwable throwab
33、le); void afterThrowing(Method m,Object os,Object target,Exception throwable); 第一個(gè)方法只接受一個(gè)參數(shù):需要拋出的異常。 第二個(gè)方法接受異常、被調(diào)用的方法、參數(shù)以及目標(biāo)對(duì)象。,三、創(chuàng)建切面,3.2 創(chuàng)建通知 3.2.5 引入通知 以前定義的通知類型是在目標(biāo)對(duì)象的方法被調(diào)用 的周圍織入。引入通知給目標(biāo)對(duì)象添加新的方法 和屬性。,三、創(chuàng)建切面,3.3 定義切入點(diǎn) 如果不能表達(dá)在應(yīng)用系統(tǒng)的什么地方應(yīng)用 通知的話,通知將毫無(wú)用處,這就是切入點(diǎn)的用處。切入點(diǎn)決定了一個(gè)特定的類的特定方法是否滿足一定的規(guī)則。若符合,通知就應(yīng)用到
34、該方法上。,三、創(chuàng)建切面,3.3 定義切入點(diǎn) 3.3.3 使用spring的切入點(diǎn)(續(xù)), order* xxxService xxxAdvisor ,三、創(chuàng)建切面,3.3 定義切入點(diǎn) 3.3.3 使用spring的靜態(tài)切入點(diǎn)(續(xù)) 正則表達(dá)式切入點(diǎn) RegexpMethodPointcut,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),hibernate核心安裝包下的: hibernate3.jar librequired*.jar liboptionalehcache-1.2.3.jar hibernate 注解安裝包下的 libtestslf4j-log4j1
35、2.jar Spring安裝包下的 distspring.jar distmodulesspring-webmvc-struts.jar libjakarta-commonscommons-logging.jar、commons-dbcp.jar、commons-pool.jar libaspectjaspectjweaver.jar、aspectjrt.jar libcglibcglib-nodep-2.1_3.jar libj2eecommon-annotations.jar liblog4jlog4j-1.2.15.jar Struts 下載struts-1.3.8-lib.zip,需要
36、使用到解壓目錄下的所有jar,建議把jstl-1.0.2.jar和standard-1.0.2.jar更換為1.1版本。Spring中已經(jīng)存在一個(gè)antlr-2.7.6.jar,所以把struts中的antlr-2.7.2.jar刪除,避免jar沖突。 數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā), ,* 引入hibernate開(kāi)發(fā)jar包,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā), . 略 cn/xxx/bean/Person.hbm.xml hibernate.dialect=org.hibernate.dial
37、ect.OracleDialect hibernate.hbm2ddl.auto=update hibernate.show_sql=false hibernate.format_sql=false ,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),實(shí)體bean配置模版xxx.hbm.xml emp_seq - ,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),Hibernate二級(jí)緩存的配置 cn/xxx/bean/Person.hbm.xml hibernate.dialect=org.hibernate.dialect.OracleDi
38、alect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false hibernate.cache.use_second_level_cache=true vider_class=org.hibernate.cache.EhCacheProvider hibernate.generate_statistics=true ,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),在需要緩存的實(shí)體bean配置文件中加入緩存配置項(xiàng) emp_
39、seq - usage說(shuō)明了緩存的策略,region指定緩存的區(qū)域名,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),Ehcache默認(rèn)的配置文件ehcache.xml(放在類路徑下 src目錄下即可) defaultCache節(jié)點(diǎn)為缺省的緩存策略 maxElementsInMemory 內(nèi)存中最大允許存在的對(duì)象數(shù)量 eternal 設(shè)置緩存中的對(duì)象是否永遠(yuǎn)不過(guò)期 overflowToDisk 把溢出的對(duì)象存放到硬盤上 timeToIdleSeconds 指定緩存對(duì)象空閑多長(zhǎng)時(shí)間就過(guò)期,過(guò)期的對(duì)象會(huì)被清除掉 timeToLiveSeconds 指定緩存對(duì)象總的存活時(shí)間 diskPersistent 當(dāng)jvm結(jié)束是是否持久化對(duì)象 diskExpiryThreadIntervalSeconds 指定專門用于清除過(guò)期對(duì)象的監(jiān)聽(tīng)線程的輪詢時(shí)間,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),繼續(xù)集成struts 1.3 把struts 包引入到項(xiàng)目中 在web-inf 目錄下創(chuàng)建 struts-config.xml 文件,Spring2.5+Hibernate3.3+Struts1.3整合開(kāi)發(fā),在web容器中配置struts, struts o
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)三年級(jí)(動(dòng)車組檢修技術(shù))動(dòng)車組檢修試題及答案
- 2025年大學(xué)精細(xì)化工技術(shù)(分離技術(shù))模擬試題
- 2025年中職建筑機(jī)械安裝(建筑機(jī)械安裝)試題及答案
- 2025年大學(xué)本科(會(huì)計(jì)學(xué))財(cái)務(wù)共享應(yīng)用階段測(cè)試題及答案
- 2025年高職(護(hù)理)重癥護(hù)理實(shí)務(wù)階段測(cè)試題及答案
- 2025年中職休閑體育(健身指導(dǎo)方法)試題及答案
- 2025年中職第二學(xué)年(健身休閑服務(wù))健身俱樂(lè)部管理實(shí)操測(cè)試卷
- 2025年大學(xué)旅游管理(旅游學(xué)原理)試題及答案
- 2025年高職數(shù)字媒體藝術(shù)設(shè)計(jì)(數(shù)字設(shè)計(jì))試題及答案
- 2025年高職測(cè)繪工程技術(shù)(GIS技術(shù)應(yīng)用)試題及答案
- 2026年高考化學(xué)模擬試卷重點(diǎn)知識(shí)題型匯編-原電池與電解池的綜合
- 2025青海省生態(tài)環(huán)保產(chǎn)業(yè)有限公司招聘11人筆試歷年參考題庫(kù)附帶答案詳解
- 2025浙江杭州錢塘新區(qū)建設(shè)投資集團(tuán)有限公司招聘5人筆試參考題庫(kù)及答案解析
- 2026年湖南電氣職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)含答案詳解
- 2025年天津市普通高中學(xué)業(yè)水平等級(jí)性考試思想政治試卷(含答案)
- 2025年昆明市呈貢區(qū)城市投資集團(tuán)有限公司及下屬子公司第二批招聘(11人)備考核心題庫(kù)及答案解析
- 2025年度護(hù)士個(gè)人工作總結(jié)與展望
- 2025年中國(guó)磁懸浮柔性輸送線行業(yè)市場(chǎng)集中度、競(jìng)爭(zhēng)格局及投融資動(dòng)態(tài)分析報(bào)告(智研咨詢)
- 學(xué)堂在線 雨課堂 學(xué)堂云 科研倫理與學(xué)術(shù)規(guī)范 期末考試答案
- GA/T 970-2011危險(xiǎn)化學(xué)品泄漏事故處置行動(dòng)要?jiǎng)t
- 公文格式(全區(qū))課件
評(píng)論
0/150
提交評(píng)論