日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring 入门知识点笔记整理

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

一.Spring?概述

1.?什么是spring?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5.常用的幾個應(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通過容器使得對象無需自己負責查找和創(chuàng)建與其關(guān)聯(lián)的其他對象,做到解耦.

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

1.依賴注入(DI)

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

對象無需知道依賴對象來自何處或依賴的實現(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的定義,并實例化bean。
  • Spring根據(jù)bean的定義填充所有的屬性。
  • 如果bean實現(xiàn)了BeanNameAware?接口,Spring?傳遞bean?的ID?到?setBeanName方法。
  • 如果Bean?實現(xiàn)了?BeanFactoryAware?接口,?Spring傳遞beanfactory?給setBeanFactory?方法。
  • 如果有任何與bean相關(guān)聯(lián)的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內(nèi)調(diào)用它們。
  • 如果bean實現(xiàn)IntializingBean了,調(diào)用它的afterPropertySet方法,如果bean聲明了初始化方法,調(diào)用此初始化方法。
  • 如果有BeanPostProcessors?和bean?關(guān)聯(lián),這些bean的postProcessAfterInitialization()?方法將被調(diào)用。
  • 如果bean實現(xiàn)了?DisposableBean,它將調(diào)用destroy()方法。

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

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

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

8.Bean的初始化的銷毀

?  為Bean定義初始化和銷毀只需要使用init-method和destroy-method參數(shù)配置<bean>元素就可以.定義全部bean的默認的初始化和銷毀在<beans> 元素里配置default-init-method和default-destroy-metho.另一種方式時通過分別實現(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中還可以包含另一個<list>作為成員.list屬性也可以用set來裝配,同理set屬性也可以用list來裝配.(如果Bean的屬性類型為數(shù)據(jù)類型或者java.util.Collection接口的任意實現(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)用方法和訪問對象的屬性
  • 對值進行算術(shù),關(guān)系和邏輯運算
  • 正則表達式匹配
  • 集合操作

11.SpEL常用操作

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

12.自動裝配Bean屬性

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

  • no:默認的方式是不進行自動裝配,通過顯式設(shè)置ref?屬性來進行裝配。
  • byName: 把與Bean的屬性具有相同名字(或ID)的其他Bean自動裝配到Bean對應(yīng)的屬性中.如果沒有與屬性名字一樣的bean,則該屬性不進行裝配.(缺點:名字必須一樣)
  • byType把與Bean的屬性具有相同類型的其他Bean自動裝配到Bean對應(yīng)的屬性中.如果沒有,則不裝配.如果有多個Bean的類型相同的話Spring會拋出異常,可以通過設(shè)置首選Bean或取消某個Bean的自動裝配候選資格.設(shè)置首選可以在<Bean>中的primary屬性設(shè)置為true,取消候選資格可以將autowire-candidate設(shè)置為false(如果同時設(shè)置:則該bean的設(shè)置為取消候選資格.primary默認設(shè)置為false,所以需要用primary時得將其他beanprimary設(shè)置為true)
  • constructor:把與Bean的構(gòu)造器參數(shù)具有相同類型的的其他Bean自動裝配到Bean構(gòu)造器對應(yīng)的參數(shù)中.設(shè)置該項,這配置文件中的<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è)置默認自動裝配,即在beans中加入屬性default-autowire=”true”

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

13.注解裝配

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

  有三種方式進行注解裝配:

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

  Component 標注類為spring組件

  Controller 定義為spring mvc controller

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

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

  使用@Component標注的任意自定義注解

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

過濾類型包括:

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

.面向切面AOP 

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

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

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

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

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

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

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

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

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

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

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

spring 提供了4中AOP編程:

.基于代理的AOP編程

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

.POJO切面

4.注入式Aspectj切面編程

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

AspectJ的切點表達式語言:

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

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

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

<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)容還不錯,歡迎將生活随笔推薦給好友。