国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Spring3學習筆記

2019-11-08 19:27:27
字體:
供稿:網(wǎng)友

SPRing3學習筆記

Spring3學習筆記一Spring簡介二IOC詳解三DI一注入方式六AOP面向切面編程一AOP基礎(chǔ)二基于配置Schema的AOP

一、Spring簡介

Spring 是一個開源的輕量級應(yīng)用開發(fā)框架。使用Spring可以簡化開發(fā)流程,Spring可以幫我們管理對象和依賴關(guān)系,提供通用日志記錄、性能統(tǒng)計、安全控制、事務(wù)處理等。

Ioc容器AOP事務(wù)管理JDBCMVC框架and so on

非侵入式設(shè)計:應(yīng)用程序不需繼承框架的類或接口即可使用框架提供的功能。方便代碼重用和框架切換。

POJO:簡單java對象,只包含業(yè)務(wù)邏輯或持久化邏輯。容器:提供運行環(huán)境,如Tomcat;管理對象生命周期和依賴關(guān)系,如Spring。AOP:AOP是aspect Oriented Programming的縮寫,意思是面向切面編程。抽取通用的代碼邏輯,在需要的時候動態(tài)織入到程序中去。

二、IOC詳解

IOC:控制反轉(zhuǎn),它不是一項技術(shù),而是一種設(shè)計思想。IOC容器控制了對象的生命周期和依賴關(guān)系,將對象的獲取方式反轉(zhuǎn)了。DI:依賴注入,它是IOC的同一個概念的不同角度描述IOC容器:具有依賴注入功能的容器,Spring中的是BeanFactory,其實現(xiàn)類有applicationContext、WebApplicationContext、ClassPathxmlApplicationContext、FileSystemXMLApplicationContext。Bean:由IOC容器管理的對象叫Bean。IOC容器使用BeanDefinition類來表示bean在xml文件中的定義信息。主要包含: 全限定名Bean在容器中的行為,包括作用域、是否惰性初始化、生命周期Bean的創(chuàng)建方式:構(gòu)造器、工程方法Bean依賴關(guān)系,即對其他Bean的引用Bean命名:id是唯一標識符;只有name時,name也可做標識符,可以有別名(alias)

Bean定義方式:

無參構(gòu)造器:

<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>

有參構(gòu)造器:

<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2"> <!-- 指定構(gòu)造器參數(shù) --> <constructor-arg index="0" value="Hello Spring!"/> </bean>

靜態(tài)工廠方式

<!-- 使用靜態(tài)工廠方法 --> <bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"/> </bean>

實例工廠方式

<!—1、定義實例工廠Bean --> <bean id="beanInstanceFactory" class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/> <!—2、使用實例工廠Bean創(chuàng)建Bean --> <bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"></constructor-arg> </bean>

假如A類依賴B接口對象,這時B接口有多個實現(xiàn)類注冊到了IOC容器中,在注入的時候,spring會報錯:重復(fù)定義

Spring的IOC有兩層含義:Bean依賴容器和容器注入Bean的依賴資源。好處如下:

動態(tài)替換Bean依賴對象,程序更靈活;更好實踐面向接口編程,代碼更清晰;更好實踐優(yōu)先使用對象組合,而不是繼承;增加Bean可復(fù)用性;

三、DI

(一)注入方式

構(gòu)造器注入 可分為三種:根據(jù)參數(shù)索引注入、根據(jù)參數(shù)類型注入、根據(jù)參數(shù)名注入,其中索引注入可靠性最高,參數(shù)類型注 入中除了制定類型外,還要按照構(gòu)造函數(shù)的參數(shù)列表順序來注入。 構(gòu)造器注入是需要相應(yīng)的構(gòu)造函數(shù)的,Spring的BeanFactory會根據(jù)配置文件中配置的參數(shù)(即constructor)的個數(shù)、類型等屬性來匹配構(gòu)造器,如果構(gòu)造器匹配失敗則拋出異常

<!-- 直接用構(gòu)造器進行類屬性的注入 ,屬性映射使用相應(yīng)構(gòu)造器的參數(shù)列表的index進行映射--><bean id="byIndex" class="com.rambo.domain.Person"> <constructor-arg index="0" value="Hello World!" /> <constructor-arg index="1" value="1" /></bean><!--使用靜態(tài)工廠類來調(diào)用構(gòu)造器進行注入 ,屬性映射使用相應(yīng)構(gòu)造器的參數(shù)列表的index+type進行映射 --><bean id="byType" class="com.rambo.domain.PersonStaticFactory" factory-method="newInstance"> <constructor-arg type="java.lang.String" value="Hello World!" /> <constructor-arg type="int" value="2" /></bean><!--使用實例工廠類來調(diào)用構(gòu)造器進行注入 ,屬性映射使用相應(yīng)構(gòu)造器的參數(shù)列表的index+name進行映射,不建議使用 --><bean id="byName" class="com.rambo.domain.PersonFactory" factory-method="newInstance"> <constructor-arg name="message" value="Hello World!" /> <constructor-arg name="index" value="3" /></bean>

setter注入 其先通過默認構(gòu)造器實例化Bean以后,再通過setter方法將屬性設(shè)值,所以該類的默認構(gòu)造器不能被覆蓋。

<!-- 通過setter方式進行依賴注入 --> <bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4"> <property name="message" value="Hello World!"/> <property name="index"> <value>1</value> </property> </bean>

可以看出來,value如果用簡寫的方式,指定的全是字符串,類型轉(zhuǎn)換的工作有Spring容器來處理,如果轉(zhuǎn)換出錯將拋出相應(yīng)的異常。 Spring類型轉(zhuǎn)換系統(tǒng)對于boolean類型進行了容錯處理,除了true/false外,還可以用yes/no、on/off、1/0來表示。

六、AOP–面向切面編程

(一)AOP基礎(chǔ)

AOP:面向切面編程,是一種編程范式。模板方法:接口定義方法fun(),實現(xiàn)類A實現(xiàn)fun(),并定義模板方法funA(), 子類繼承A,并實現(xiàn)funA()。AOP相關(guān)概念: 關(guān)注點:可以認為是所關(guān)注的任何東西,如支付組件;關(guān)注點分離:將問題細化為不可分割的組件,如支付組件和日志組件;橫切關(guān)注點:一個組件無法完成所需的功能,需要其他組件協(xié)助完成,如日志組件橫切于支付組件;織入:橫切關(guān)注點分離后,需要通過某種技術(shù)將橫切關(guān)注點融合到系統(tǒng)中來完成需要的功能;織入可能發(fā)生在編譯期、加載期、運行期等。橫切關(guān)注點有很多,如非業(yè)務(wù)的:日志、事務(wù)處理、緩存、性能統(tǒng)計、權(quán)限控制;也有可能業(yè)務(wù)的。AOP的作用: 分離橫切關(guān)注點并織入;完善OOP;降低組件和模塊之間的耦合性;使系統(tǒng)容易擴展;更好地復(fù)用組件。AOP基本概念: 連接點(Jointpoint):表示在什么地方進行橫切關(guān)注點的插入,如:類初始化、方法執(zhí)行、方法調(diào)用、字段調(diào)用、異常處理等,Spring只支持方法執(zhí)行的連接點,在哪里干 切入點(Pointcut):連接點的集合,Spring支持perl5正則表達式和AspectJ切入點模式,默認使用AspectJ語法,在哪兒干的集合通知(Advice):在連接點上執(zhí)行的行為,包括前置通知(before advice)、后置通知(after advice)、環(huán)繞通知(around advice),Spring通過代理模式實現(xiàn)AOP,并通過攔截器模式以環(huán)繞連接點的攔截器鏈織入通知,干什么方法/切面(Aspect):橫切關(guān)注點的模塊化,如日志組件。Spring中可以使用Schema和@AspectJ方式進行組織實現(xiàn),在哪兒干和干什么的集合引入(inter-type declaration):內(nèi)部類型聲明,為已有的類添加新的字段/方法。目標對象(Target Object):需要織入橫切關(guān)注點的對象,亦作”被通知對象”,Spring中是被代理對象,即委托對象,對誰干織入(Weaving):將切面應(yīng)用到目標對象從而創(chuàng)建出AOP代理對象的過程,可以在編譯期、類裝載期、運行期進行。

(二)基于配置(Schema)的AOP


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 固始县| 三台县| 福建省| 汝阳县| 通道| 天台县| 罗定市| 晋城| 庆安县| 乌兰浩特市| 萨迦县| 基隆市| 淮阳县| 三亚市| 手游| 宜兰市| 松江区| 门头沟区| 怀化市| 丹阳市| 新宁县| 肇东市| 景宁| 柞水县| 息烽县| 乳山市| 株洲县| 怀集县| 鹤山市| 东乡县| 兴业县| 栾川县| 浠水县| 连山| 灵川县| 江都市| 宣化县| 克拉玛依市| 海伦市| 乐平市| 新竹县|