Spring 2018-10-11

1.Helloworld

利用配置文件(Bean.xml)進行類的配置,利用全類名進行反射的方式進行類的創(chuàng)建

ApplicationContext ctx =new ClassPathXmlApplicationContext("Beans.xml");類路徑下的配置文件

<bean id="helloworld" class="com.HelloWorld.HelloWorld">

? ? <property name="name2" value ="Spring">

</bean>

其中,name的值為setProperty中set后面的值,可與具體變量名不同码邻,即setName2設置的是name屬性的值灾常。

2.Bean的配置

IOC(Inversion of Control)控制反轉(zhuǎn):反轉(zhuǎn)資源獲取的方向。容器主動地將資源推送給它所管理的組件, 組件所要做的僅是選擇一種合適的方式來接受資源啃炸。

DI(Dependency Injection)依賴注入:組件以一些預先定義好的方式( ( 例如 : setter 方法) ) 接受來自如容器的 資源 注入

2.1 配置bean

class:bean的全類目,通過反射的方式在IOC容器中創(chuàng)建bean加派,要求bean中必須有無參數(shù)的構(gòu)造器

id:通過id來獲取bean的實例叫确,id值唯一

2.2Spring 提供了兩種類型的 IOC 容器實現(xiàn)

–? BeanFactory: IOC 容器的基本實現(xiàn).面向Spring本身,Spring基礎設施

–? ApplicationContext: 提供了更多的高級特性. 是 BeanFactory 的子

接口.幾乎所有的應用場合都直接使用芍锦。面向使用 Spring 框架的開發(fā)

2.3ApplicationContext 代表IOC容器

ApplicationContext 在初始化上下文時就實例化所有單例的 Bean竹勉。

實現(xiàn)類:

ClassPathXmlApplicationContext:從類路徑下加載xml配置文件

FileSystemXmlApplicationContext: 從文件系統(tǒng)中加載配置文件

2.4獲取Bean的方式

-可通過id獲取

-可通過類的類型獲取,但要求IOC容器中必須只能有一個該類型的Bean

2.5.依賴注入的方式

-屬性的注入:通過setter注入

<property name="name2" value ="Spring"></property>

字面值:可用字符串表示的值娄琉,可以通過 <value> 元素標簽或 value 屬性進行注入次乓。若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起來孽水。

-構(gòu)造方法注入:通過構(gòu)造器注入,可指定參數(shù)的位置和類型票腰,以區(qū)分重載的構(gòu)造器
<constructor-arg value="audi" index="0"/type="java.lang.String"></constructor-arg>

2.6引用其他的類

-以通過 <ref> 元素或 ref 屬性為 Bean 的屬性或構(gòu)造器參數(shù)指定對 Bean 的引用.

<ref bean="car2"><property name="" ref="car2">

-也可以 在屬性或構(gòu)造器里包含 Bean 的聲明, 這樣的 Bean稱為內(nèi)部 Bean.不用寫id,其他都一樣女气,不能夠被外部引用杏慰,只能在內(nèi)部使用。

2.7為級聯(lián)屬性賦值

屬性需先初始化才可以進行賦值炼鞠,否則異常

<property name ="car.maxspeed" value=""></property>

2.8集合屬性

在 Spring中可以通過一組內(nèi)置的 xml 標簽(例如: <list>,<set> 或 <map>) 來配置集合屬性.

</list>

? ? <ref bean="car">

? ? <ref bean="car">

</list>

<map>

<entry key="aa" value-ref="car"></entry>

<entry key="bb" value-ref="car2"></entry>

</map>

<property name="properties">

? ? ? ? <prop key="name">root</prop>

</property>

-配置單例的集合bean逃默,以供多個bean進行引用,利用ref=cars可以引用

<util:list id="cars">

? ? <ref bean="car">

</util:list>

2.9 p空間

<bean id="person3" class="com.collection.Person" p:age="30" p:name="hahaha" p:cars-ref="cars">

3.自動裝配

<bean id="person" class="com.autowire.Person" autowire="byName" p:name="hahaha"></bean>

4.Bean 之間的關(guān)系

繼承配置bean:子bean從父bean中繼承配置簇搅,也可覆蓋配置

<bean id="address2" p:street="lanbailou" parent="address"></bean>

抽象Bean:只能用來進行繼承配置,不能IOC容器被實例化

<bean id="address" class="com.autowire.Address" abstract="true"></bean>

若class屬性沒有指定软吐,則必須為抽象bean瘩将,必須指定abstract=true

依賴關(guān)系:

depends-on=“car,person” 前置依賴car和person的bean凹耙,需在本bean實例之前創(chuàng)建好

5.Bean的作用域

<bean id="car" class="Car" p:brand="brand" scope="prototype"></bean>

singleton:默認姿现,單例,容器初始化時創(chuàng)建實例,整個生命周期內(nèi)只創(chuàng)建一個

prototype:只有獲取實例的時候創(chuàng)建新的實例肖抱,容器初始化時不創(chuàng)建

6.使用外部屬性文件

<context:property-placeholder location="classpath:db.properties"/>導入資源文件

創(chuàng)建外部文件db.properties?? 文件中內(nèi)容為:price=test_properties

利用<property name="brand" value="${price}"></property>格式調(diào)用

7.spel

value=“#{' hhhh '}”

8.IOC容器中Bean的生命周期

Spring IOC 容器對 Bean 的生命周期進行管理的過程:

– 通過構(gòu)造器或工廠方法創(chuàng)建 Bean 實例

– 為 Bean 的屬性設置值和對其他 Bean 的引用

將 Bean 實例傳遞給 Bean 后置處理器的postProcessBeforeInitialization 方法

–? 調(diào)用 Bean? 的初始化方法

將 Bean 實例傳遞給 Bean 后置處理器的postProcessAfterInitialization方法

– Bean 可以使用了

–? 當容器關(guān)閉時,? 調(diào)用 Bean? 的銷毀 方法

Bean的后置處理器

類實現(xiàn)BEANPostProcessor接口备典,并具體提供以下兩個方法的實現(xiàn)

返回bean,可在方法中修改方法的bean意述,該處理器適用于所有的bean

init之后和init之前的方法

不用配置id提佣,ioc自動識別

<bean class="BeanPostProcessor"></bean>

9.通過工廠方法配置Bean
10.通過factoryBean配置Bean

自定義factoryBean需要實現(xiàn)接口

通過factorybean來配置bean的實例,class指向factorybean的全類名

11.配置基于注解的方式

組件掃描(component scanning): Spring 能夠從classpath 下自動掃描, 偵測和實例化具有特定注解的組件.

? 特定組件包括:

– @Component: 基本注解, 標識了一個受 Spring 管理的組件

– @Respository: 標識持久層組件

– @Service: 標識服務層(業(yè)務層)組件

– @Controller: 標識表現(xiàn)層組件

對于掃描到的組件, Spring 有默認的命名策略: 使用非限定類名, 第一個字母小寫.? 也可以在注解中通過 value? 屬性值標識組件的名稱荤崇。

Spring 的配置文件中聲明:

<context:component-scan base-package="com.annotation" resource-pattern="repository/*.class"></context:component-scan>

兩個屬性

base-package:掃描包及子包下的文件

resource-pattern:指定路徑的資源

子節(jié)點:

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:exclude-filter>指定排除哪些指定表達式的組件

<context:include-filter type="assignable" expression="接口名(不包含接口和接口所有實現(xiàn)類)"></context:include-filter>只包含表達式的組件拌屏,屬性 use-default-filters=false才起作用

組件裝配:

@Autowired 注解自動裝配 具有兼容類型的單個 Bean屬性

默認情況下, 所有使用@Authwired 注解的屬性都需要被設置. 當 Spring 找不到匹配的 Bean? 裝配屬性時,? 會拋出異常,? 若某一屬性允許不被設置,? 可以設置@ Authwired 注解的 required? 屬性為 false。

當 IOC 容器里存在多個類型兼容的 Bean 時

1.可通過value設置為接口名术荤,自動裝配該實現(xiàn)類

2.@Qualifier 注解里提供 Bean 的名稱. Spring 允許對方法的入?yún)俗?@ Qualifiter 已指定注入 Bean? 的名稱

12.泛型依賴注入

類中包含接口倚喂,通過泛型的類型尋找具有同樣泛型類型的實現(xiàn)類

同樣的<User,使UserService和UserRepository配對

13.AOP 面向切面編程

joinPoint參數(shù)訪問到連接細節(jié)

1.XML文件配置瓣戚,使注解起作用

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

2.切面:

@Component:把類放入IOC容器中

@Aspect:定義為切面

@Before("execution(public * com.aop.helloworld.*.*(..))")

AspectJ 支持 5 種類型的通知注解:

–? @Before: 前置通知, 在方法執(zhí)行之前執(zhí)行

–? @After: 后置通知, 在方法執(zhí)行之后執(zhí)行端圈,不能訪問返回結(jié)果

–? @ AfterRunning: 返回通知, 在方法返回結(jié)果之后執(zhí)行

–? @ AfterThrowing: 異常通知, 在方法拋出異常之后

–? @Around: 環(huán)繞通知, 圍繞著方法執(zhí)行

返回通知
異常通知

環(huán)繞通知:

1.需要攜帶ProceedingJoinPoint類型參數(shù)

2.必須有返回值焦读,返回值即為目標方法的返回值

環(huán)繞通知

切面優(yōu)先級:

@Order(數(shù)值,值越小舱权,優(yōu)先級越高)

13.2 聲明切入點表達式

@Pointcut("execution(public * com.aop.helloworld.*.*(..))")

public void declareJoinPointExpression(){}

@Before("declareJoinPointExpression()")其他通知直接使用方法名來引用切入點表達式

優(yōu)點:便于修改切入點表達式

14.Spring 對Jdbc的使用

配置c3p0數(shù)據(jù)源

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

? ? <property name="driverClassName" value="${jdbc.driverClassName}"/>

? ? <property name="url" value="${jdbc.url}"/>

? ? <property name="username" value="${jdbc.user}"/>

? ? <property name="password" value="${jdbc.password}"/>

</bean>


<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/>VALUES(?,?,?)

<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"<constructor-arg ref="dataSource"/>帶參數(shù)VALUES(:lastName,:email,:dpetId)


15.Jdbc中的事務聲明

事務:一系列動作矗晃,單獨的工作單元。要么全部完成刑巧,要么都不完成喧兄。

-原子性

-一致性

-隔離性

-持久性

<!--配置事務管理器管理-->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

? ? <property name="dataSource" ref="dataSource">

<!--啟用事務注解-->

<tx:annotation-driven transaction-manager="transactionManager"/>

注解:

@Transactional

事務的傳播行為

@Transactional(propagation = Propagation.REQUIRED)

propagation 指定傳播行為,默認取值為required啊楚,即使用調(diào)用方法的事務

事務的隔離級別

@Transactional(isolation = Isolation.DEFAULT)

– 臟讀: 對于兩個事物 T1, T2, T1 讀取了已經(jīng)被 T2 更新但 還沒有被提交的字段. 之后, 若 T2 回滾, T1讀取的內(nèi)容就是臨時且無效的.

– 不可重復讀:對于兩個事物 T1, T2, T1 讀取了一個字段, 然后 T2 更新了該字段. 之后, T1再次讀取同一個字段, 值就不同了.

– 幻讀:對于兩個事物 T1, T2, T1 從一個表中讀取了一個字段, 然后T2 在該表中插入了一些新的行. 之后, 如果 T1 再次讀取同一個表,就會多出幾行.

回滾事務屬性

@Transactional(noRollbackFor ={AccountException.class})

默認情況下spring的聲明式事務對所有的運行時異常進行回滾

只讀屬性:

@Transactional(readOnly =true)只讀數(shù)據(jù)不更新數(shù)據(jù)

超時屬性:

@Transactional(timeout =1)事務在強制回滾之前可以保持多久. 這樣可以防止長期運行的事務占用資源(秒為單位)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吠冤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恭理,更是在濱河造成了極大的恐慌拯辙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜价,死亡現(xiàn)場離奇詭異涯保,居然都是意外死亡,警方通過查閱死者的電腦和手機周伦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門夕春,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人专挪,你說我怎么就攤上這事及志。” “怎么了寨腔?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵速侈,是天一觀的道長。 經(jīng)常有香客問我迫卢,道長倚搬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任乾蛤,我火速辦了婚禮每界,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幻捏。我一直安慰自己盆犁,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布篡九。 她就那樣靜靜地躺著谐岁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伊佃,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天窜司,我揣著相機與錄音,去河邊找鬼航揉。 笑死塞祈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的帅涂。 我是一名探鬼主播议薪,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼媳友!你這毒婦竟也來了斯议?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醇锚,失蹤者是張志新(化名)和其女友劉穎哼御,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焊唬,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡恋昼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赶促。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片液肌。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸥滨,靈堂內(nèi)的尸體忽然破棺而出矩屁,到底是詐尸還是另有隱情,我是刑警寧澤爵赵,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站泊脐,受9級特大地震影響空幻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜容客,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一秕铛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缩挑,春花似錦但两、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春紧阔,著一層夾襖步出監(jiān)牢的瞬間坊罢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工擅耽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留活孩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓乖仇,卻偏偏與公主長得像憾儒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乃沙,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,584評論 0 8
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎的功能是IoC(控制反轉(zhuǎn))容器起趾,...
    simoscode閱讀 6,719評論 2 22
  • 本文是我自己在秋招復習時的讀書筆記,整理的知識點崔涂,也是為了防止忘記阳掐,尊重勞動成果,轉(zhuǎn)載注明出處哦冷蚂!如果你也喜歡缭保,那...
    波波波先森閱讀 12,294評論 6 86
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)蝙茶,斷路器艺骂,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 不知從什么時候钳恕,就愛上了文字里的委婉和瀟逸。在那輕靈的文字里暢游蹄衷,心是愉悅的忧额。 和你的遇見,讓我記憶猶新愧口。是...
    信步云天閱讀 229評論 0 3