日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Spring 入门知识点笔记整理

發(fā)布時(shí)間:2025/7/14 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring 入门知识点笔记整理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.Spring?概述

1.?什么是spring?

Spring?是個(gè)java企業(yè)級應(yīng)用的開源開發(fā)框架。Spring主要用來開發(fā)Java應(yīng)用,但是有些擴(kuò)展是針對構(gòu)建J2EE平臺的web應(yīng)用。Spring?框架目標(biāo)是簡化Java企業(yè)級應(yīng)用開發(fā),并通過POJO為基礎(chǔ)的編程模型促進(jìn)良好的編程習(xí)慣。

2. 如何實(shí)現(xiàn)簡化java開發(fā)的目標(biāo)?

  為了降低java開發(fā)的復(fù)雜性,spring主要采取以下4種關(guān)鍵策略:

  • 基于POJO的輕量級和最小侵入性編程。
  • 通過依賴注入和面向接口編程實(shí)現(xiàn)松耦合。
  • 基于切面和慣例進(jìn)行聲明式編程。
  • 通過切面和模版減少樣式代碼。

3.?使用Spring框架的好處是什么?

  • 輕量:Spring?是輕量的,基本的版本大約2MB。
  • 控制反轉(zhuǎn):Spring通過控制反轉(zhuǎn)實(shí)現(xiàn)了松散耦合,對象們給出它們的依賴,而不是創(chuàng)建或查找依賴的對象們。
  • 面向切面的編程(AOP):Spring支持面向切面的編程,并且把應(yīng)用業(yè)務(wù)邏輯和系統(tǒng)服務(wù)分開,并使系統(tǒng)服務(wù)模塊化。
  • 容器:Spring?包含并管理應(yīng)用中對象的生命周期和配置。
  • MVC框架:Spring的WEB框架是個(gè)精心設(shè)計(jì)的框架,是Web框架的一個(gè)很好的替代品。
  • 事務(wù)管理:Spring?提供一個(gè)持續(xù)的事務(wù)管理接口,可以擴(kuò)展到上至本地事務(wù)下至全局事務(wù)(JTA)。
  • 異常處理:Spring?提供方便的API把具體技術(shù)相關(guān)的異常(比如由JDBC,Hibernate?or?JDO拋出的)轉(zhuǎn)化為一致的unchecked?異常。
  • 提供模版:減少了樣板式代碼

4.??Spring由哪些模塊組成?

  spring可以分為6個(gè)定義明確的模塊組成:

  • 核心容器模塊:是spring中最核心的模塊。負(fù)責(zé)Bean的創(chuàng)建,配置和管理。主要包括:beans,core,context,expression等模塊。
  • Spring的AOP模塊:主要負(fù)責(zé)對面向切面編程的支持,幫助應(yīng)用對象解耦。
  • 數(shù)據(jù)訪問和集成模塊:包括JDBC,ORM,OXM,JMS和事務(wù)處理模塊,其細(xì)節(jié)如下:
  • ? ? JDBC模塊提供了不再需要冗長的JDBC編碼相關(guān)了JDBC的抽象層。

   ? ? ?ORM模塊提供的集成層。流行的對象關(guān)系映射API,包括JPA,JDO,Hibernate和iBatis。

? ? ? ? ? ? OXM模塊提供了一個(gè)支持對象/ XML映射實(shí)現(xiàn)對JAXB,Castor,使用XMLBeans,JiBX和XStream 的抽象層。

? ? ? ? ? ? Java消息服務(wù)JMS模塊包含的功能為生產(chǎn)和消費(fèi)的信息。

? ? ? ? ? ? 事務(wù)模塊支持編程和聲明式事務(wù)管理實(shí)現(xiàn)特殊接口類,并為所有的POJO。

  • Web和遠(yuǎn)程調(diào)用:包括web,servlet,struts,portlet模塊。
  • 測試模塊:test
  • 工具模塊

5.常用的幾個(gè)應(yīng)用上下文

  • ClassPathXmlApplicationContext:從類路徑下的xml配置文件中加載上下文定義.
  • FileSystemXmlApplicationContext:讀取文件系統(tǒng)下xml配置文件并加載
  • XmlWebApplicationContext:讀取Web應(yīng)用下的Xml配置文件并加載上下文定義

二.容器

  創(chuàng)建應(yīng)用對象之間關(guān)系的傳統(tǒng)方法通常會導(dǎo)致對象之間耦合性過高,且難以復(fù)用和測試.spring通過容器使得對象無需自己負(fù)責(zé)查找和創(chuàng)建與其關(guān)聯(lián)的其他對象,做到解耦.

  裝配:創(chuàng)建應(yīng)用對象之間協(xié)作關(guān)系的行為稱為裝配,這是依賴注入的本質(zhì).

1.依賴注入(DI)

  概念:對象的依賴關(guān)系將有負(fù)責(zé)協(xié)調(diào)系統(tǒng)中各個(gè)對象的第三方組建在創(chuàng)建對象時(shí)設(shè)定。對象無需自行創(chuàng)建或管理它們的依賴關(guān)系—依賴關(guān)系將自動注入到需要它們的對象中去。

對象無需知道依賴對象來自何處或依賴的實(shí)現(xiàn)方式。

  依賴注入能讓相互協(xié)作的軟件組件保持松散耦合。AOP編程允許把你遍布應(yīng)用各處的功能分離出來形成可重用的組件

2.Spring容器可歸為兩種:

  Bean工廠(由org.springframework.beans.factory.BeanFactory)

  應(yīng)用上下文(org.springframework.context.ApplicationContext)

3.Spring框架中bean的生命周期。

  • Spring容器?從XML?文件中讀取bean的定義,并實(shí)例化bean。
  • Spring根據(jù)bean的定義填充所有的屬性。
  • 如果bean實(shí)現(xiàn)了BeanNameAware?接口,Spring?傳遞bean?的ID?到?setBeanName方法。
  • 如果Bean?實(shí)現(xiàn)了?BeanFactoryAware?接口,?Spring傳遞beanfactory?給setBeanFactory?方法。
  • 如果有任何與bean相關(guān)聯(lián)的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內(nèi)調(diào)用它們。
  • 如果bean實(shí)現(xiàn)IntializingBean了,調(diào)用它的afterPropertySet方法,如果bean聲明了初始化方法,調(diào)用此初始化方法。
  • 如果有BeanPostProcessors?和bean?關(guān)聯(lián),這些bean的postProcessAfterInitialization()?方法將被調(diào)用。
  • 如果bean實(shí)現(xiàn)了?DisposableBean,它將調(diào)用destroy()方法。

4.spring的核心框架帶有10個(gè)命名空間配置  

5.構(gòu)造器注入

<constructor-arg value="" /> <constructor-arg ref="" /> View Code

6.通過工廠方法創(chuàng)建Bean

<bean id="" class="工廠類" factory-method="對應(yīng)方法" />

7.Bean的作用域  

Spring框架支持以下五種bean的作用域:

  • singleton?:?bean在每個(gè)Spring?ioc?容器中只有一個(gè)實(shí)例。
  • prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例。
  • request:每次http請求都會創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring?ApplicationContext情形下有效。
  • session:在一個(gè)HTTP?Session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring?ApplicationContext情形下有效。
  • global-session:在一個(gè)全局的HTTP?Session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring?ApplicationContext情形下有效。

缺省的Spring?bean?的作用域是Singleton.

8.Bean的初始化的銷毀

?  為Bean定義初始化和銷毀只需要使用init-method和destroy-method參數(shù)配置<bean>元素就可以.定義全部bean的默認(rèn)的初始化和銷毀在<beans> 元素里配置default-init-method和default-destroy-metho.另一種方式時(shí)通過分別實(shí)現(xiàn) InitializingBeanDisposableBean 接口,但這種方法產(chǎn)生了應(yīng)用與框架的耦合,建議使用第一種.

<beans ….... default-init-method="onLight" default-destroy-method=”offLight” ><bean id="light" class="joe.spring.util.Light"/> </beans> <!--注:該方法所在的類必須創(chuàng)建Bean --> View Code

9.注入bean屬性

<!--簡單值--> <property name="" value=""/> <!--引用--> <property name="" ref=""/><property name=""><bean class="" /> </property><!--使用命名空間p裝配--> <bean id="" class="" p:strs="" p:user-ref="" /> View Code

  集合屬性的裝配包括:list,set,map,properties.

  • list:內(nèi)容成員有<ref bean=""/>,<value>,<bean><null/>. list中還可以包含另一個(gè)<list>作為成員.list屬性也可以用set來裝配,同理set屬性也可以用list來裝配.(如果Bean的屬性類型為數(shù)據(jù)類型或者java.util.Collection接口的任意實(shí)現(xiàn)都可以用<list>元素).
  • set:同上
  • map: 成員包括<entry key="" key-ref=""/> 和<entry value=""? value-ref=""/>
  • props:可以代替map.但限定鍵和值必須為String類型.成員<prop key=""> value</prop>

10.SpEL擁有的特性

  • 使用bean的ID引用bean
  • 調(diào)用方法和訪問對象的屬性
  • 對值進(jìn)行算術(shù),關(guān)系和邏輯運(yùn)算
  • 正則表達(dá)式匹配
  • 集合操作

11.SpEL常用操作

  • 字面值:#{5} 值為5,<property name="" value="#{user}"> bean的id. 同時(shí)可以訪問bean的方法和屬性如:#{user.name},#{user.getAge()}
  • 操作類:T() 訪問類的靜態(tài)方法和屬性. #{T(java.lang.Math).PI},#{T(java.lang.Math).random() }.
  • 運(yùn)算操作:算術(shù)運(yùn)算(+,-,*,/,%,^),關(guān)系運(yùn)行(lt,gt,eq,le,ge),邏輯運(yùn)算(and,or,not,|),條件運(yùn)算(? : ),正則運(yùn)算(matches).
  • <util:list> :spring命名空間,定義bean的list集合. <util:list id="cities"> ....</util:list> ,取值用#{cities[2]}
  • 從java.util.Properties取值:<util:properties id="settings' location="classpath:settings.properties"/>? #{settings['jdbc.Driver']}
  • systemEnviroment: 包含應(yīng)用程序所在機(jī)器的所有環(huán)境變量,時(shí)java.util.Properties的一個(gè)集合.   #{systemEnviroment['HOME']}
  • systemPorperties:包含java應(yīng)用程序啟動時(shí)所設(shè)置的所有屬性. 如-Dapplication.home=/etc/myapp??? #{systemProperties['application.home']}
  • 查詢結(jié)合 :".^[]"集合中第一個(gè)匹配項(xiàng)和".$[]"集合中最后一個(gè)匹配項(xiàng).#{cities.^[population gt 100000]}
  • 投影集合".![]":從集合中的每一個(gè)成員中選擇特定的屬性放入一個(gè)新的集合中.

12.自動裝配Bean屬性

  spring提供了4中類型的自動裝配方式:

  • no:默認(rèn)的方式是不進(jìn)行自動裝配,通過顯式設(shè)置ref?屬性來進(jìn)行裝配。
  • byName: 把與Bean的屬性具有相同名字(或ID)的其他Bean自動裝配到Bean對應(yīng)的屬性中.如果沒有與屬性名字一樣的bean,則該屬性不進(jìn)行裝配.(缺點(diǎn):名字必須一樣)
  • byType把與Bean的屬性具有相同類型的其他Bean自動裝配到Bean對應(yīng)的屬性中.如果沒有,則不裝配.如果有多個(gè)Bean的類型相同的話Spring會拋出異常,可以通過設(shè)置首選Bean或取消某個(gè)Bean的自動裝配候選資格.設(shè)置首選可以在<Bean>中的primary屬性設(shè)置為true,取消候選資格可以將autowire-candidate設(shè)置為false(如果同時(shí)設(shè)置:則該bean的設(shè)置為取消候選資格.primary默認(rèn)設(shè)置為false,所以需要用primary時(shí)得將其他beanprimary設(shè)置為true)
  • constructor:把與Bean的構(gòu)造器參數(shù)具有相同類型的的其他Bean自動裝配到Bean構(gòu)造器對應(yīng)的參數(shù)中.設(shè)置該項(xiàng),這配置文件中的<constructor-arg>可以省略
  • autodetect:首先嘗試使用constructor裝配,失敗則用byType裝配
<beanid="property"class="joe.spring.util.BeanProperty" autowire=”byName”><propertyname="string" value="string Value"/></bean> <beanid="user"class="joe.spring.entity.User"/>

  設(shè)置默認(rèn)自動裝配,即在beans中加入屬性default-autowire=”true”

  自動裝配和手工裝配結(jié)合的混合裝配模式優(yōu)先考慮手工裝配,如果無手工裝配,則采用自動裝配.

13.注解裝配

  spring 容器默認(rèn)關(guān)閉注解裝配,啟用方式是用Springcontext命名空間配置<context:annotation-config>

  有三種方式進(jìn)行注解裝配:

  • ?spring自帶的@Autowire.可以放在setter上或 任何需要轉(zhuǎn)配bean的方法上.也可以放在私有或公共屬性上(可以刪除setter).以byType類型去查找bean,所以如果有多個(gè)Bean則會報(bào)錯(cuò).解決方案時(shí)加入@Qualifier注解指定注入的Bean.可以設(shè)置@Autowire(required=false)如果找不到對應(yīng)的bean則設(shè)置為null. required表示是否一定要裝配,設(shè)置為false找不到這設(shè)置為null并且不報(bào)錯(cuò).當(dāng)多個(gè)構(gòu)造器使用@Autowire 會調(diào)用參數(shù)滿足最多的構(gòu)造器.
  • JSR-330Inject注解.也可以轉(zhuǎn)配屬性,方法,構(gòu)造器,不同的是沒有required這個(gè)屬性,所以依賴關(guān)系必須存在否則報(bào)錯(cuò).針對bean歧義,采用@Name注解. 提供Provider接口可以實(shí)現(xiàn)bean的延遲注入以及注入bean的多個(gè)實(shí)例功能.
  • JSR-250 的@Recourse

@Value用于裝配String類型的值和基本類型的值(如int,boolean).可以使用SpEL.

14.自動檢測Bean

  使用自動檢測首先需要在spring配置文件配置一下代碼

  <context:component-scan base-package=”joe.spring.service” ></context:component-scan>

  context:component-scan>會掃描指定的包及其所有子包,并查找能夠自動注冊的spring Bean. 默認(rèn)查找構(gòu)造型注解所標(biāo)注的類:

  Component 標(biāo)注類為spring組件

  Controller 定義為spring mvc controller

  @Repository 定義為數(shù)據(jù)倉庫

  Service 將該類定義為服務(wù)

  使用@Component標(biāo)注的任意自定義注解

context:component-scan>配置<context:include-filter type=""  expression="">和<context:exclude-filter type="過濾類型" expression="">,進(jìn)行過濾.

過濾類型包括:

  • annotation:過濾器掃描使用制定注解所標(biāo)注的那些類,通過expression指定要掃面的注解.
  • assignable:過濾器掃描派生與expression屬性所指定的類型的那些類.
  • aspectj:過濾器掃描與expression屬性所指定的AspectJ表達(dá)式所匹配的那些類.
  • custom:使用自定義的org.springframework.core.type.TypeFilter實(shí)現(xiàn)類,該類由expression屬性指定.
  • regex:過濾器掃描的名稱與expression所指定的正則表達(dá)式所匹配的哪些類.

.面向切面AOP 

橫向關(guān)注點(diǎn):分布在應(yīng)用多處的功能.

面向切面編程的目標(biāo)是將這些橫向關(guān)注點(diǎn)和業(yè)務(wù)邏輯分開.

依賴注入(Dependency Injection ,DI)實(shí)現(xiàn)了應(yīng)用之間的解耦,面向切面編程(aspect-oriented programing ,AOP)實(shí)現(xiàn)了橫向關(guān)注點(diǎn)與它們所影響的對象解耦.

切面橫切關(guān)注點(diǎn)可以被模塊化特殊的類(通知和切點(diǎn)的結(jié)合,即what,when,where--它是什么,在何時(shí)何處完成其功能.

通知切面的工作(定義了切面是什么以及何時(shí)調(diào)用).五種類型通知:

  • before :方法被調(diào)用之前調(diào)用
  • after: 方法完成后調(diào)用通知,無論方法執(zhí)行是否成功
  • After-returning: 在方法成功執(zhí)行之后調(diào)用通知
  • After-throwing 方法拋出異常后調(diào)用通知
  • Around :通知包裹了被通知的方法,在被通知的方法調(diào)用之前或之后執(zhí)行自定義的行為

連接點(diǎn)應(yīng)用可能對數(shù)以千計(jì)的時(shí)機(jī)應(yīng)用通知,這些時(shí)機(jī)稱為連接點(diǎn).連接點(diǎn)是在應(yīng)用執(zhí)行過程中能夠插入一個(gè)切面的點(diǎn).這個(gè)點(diǎn)可能是調(diào)用方法,拋出異常或修改字段時(shí).切面代碼可以利用這些點(diǎn)插入到正常程序流程中,并加入其他行為.

切點(diǎn)縮小切面所通知的連接點(diǎn)范圍.切點(diǎn)即定義何處切入.

引入:允許我們向現(xiàn)有的類添加方法或?qū)傩?#xff0e;

織入將切面應(yīng)用到目標(biāo)對象來創(chuàng)建新的代理對象過程.切面在制定的連接點(diǎn)被織入到對象中.在目標(biāo)對象的聲明周期里有多個(gè)點(diǎn)可以織入:

  • 編譯器,切面在目標(biāo)類編譯時(shí)被織入
  • 類加載器,切面在目標(biāo)類加載到jvm 時(shí)被織入.需要特殊的類加載器,在目標(biāo)類被引入應(yīng)用時(shí)增強(qiáng)該目標(biāo)類的字節(jié)碼
  • 運(yùn)行期,切面在應(yīng)用運(yùn)行的某個(gè)時(shí)刻被織入

spring 提供了4中AOP編程:

.基于代理的AOP編程

.@Aspectj 注解驅(qū)動的切面

.POJO切面

4.注入式Aspectj切面編程

前面3個(gè)是spring基于代理的AOP編程,所以局限于方法攔截.如果要對屬性或構(gòu)造器攔截者應(yīng)調(diào)用 Aspectj里面的切面.

AspectJ的切點(diǎn)表達(dá)式語言:

  • arg() :限制連接點(diǎn)匹配參數(shù)為指定類型的執(zhí)行方法
  • @args():限制連接點(diǎn)匹配參數(shù)由指定注解標(biāo)注的執(zhí)行方法
  • execution():用于匹配是連接點(diǎn)的執(zhí)行方法
  • this():限制連接點(diǎn)匹配AOP代理的Bean引用為指定類型的類(沒懂)
  • target():限制連接點(diǎn)匹配目標(biāo)對象為制定類型的類
  • @target():限制連接點(diǎn)匹配目特定的執(zhí)行對象,這些對象對應(yīng)的類要具備指定類型的注解.
  • within():限制連接點(diǎn)匹配指定的類型
  • @within:限制連接點(diǎn)匹配指定注解所標(biāo)注的類型
  • @annotation:限制匹配帶有制定注解的連接點(diǎn)

還可以使用bean()指示器,使用bean的ID或名稱作為參數(shù)限定匹配切點(diǎn)只匹配特定的Bean.

使用注解切面時(shí)需要在配置文件中加入

<aop:aspectj-autoproxy>

環(huán)繞通知,參數(shù) (ProceedingJoinPoint joinpoint)

joinpoint.proceed() 即執(zhí)行被調(diào)用方法

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/jaylon/p/4918914.html

總結(jié)

以上是生活随笔為你收集整理的Spring 入门知识点笔记整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。