一、Spring 概述
1.Spring 是一個(gè)開(kāi)源框架,為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的,但現(xiàn)在已經(jīng)不止應(yīng)用與企業(yè)應(yīng)用
2.Spring 是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架
-從大小與開(kāi)銷兩反面而言兩反面Spring都是輕量的
-通過(guò)控制反轉(zhuǎn)的技術(shù)達(dá)到解耦的目的
-提供了面向切面變成的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開(kāi)發(fā)
-包含并管理應(yīng)用對(duì)象的配置和聲明周期,這個(gè)意義上是一種容器
-將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用,這個(gè)意義上是框架
3.Spring 開(kāi)發(fā)應(yīng)用 簡(jiǎn)單、方面、快捷 Spring
3.1框架的特點(diǎn)
-半成品
-封裝了特定的處理流程和邏輯控制
-成熟的、不斷改進(jìn)的軟件
框架與類庫(kù)的區(qū)別
-框架一般是封裝了邏輯、高內(nèi)聚的、類庫(kù)則是松散的工具組合
-框架專注于某一領(lǐng)域,類庫(kù)則是更通用的
3.2為什么使用框架
-軟件系統(tǒng)日趨復(fù)雜
-重用度高,開(kāi)發(fā)效率和質(zhì)量提高
-軟件設(shè)計(jì)人員要專注于對(duì)領(lǐng)域的了解,使需求分析更充分
-易于上手,快速解決問(wèn)題
二、Spring IOC
專題一 IOC
-接口及面向接口變成
-什么事IOC
-Spring的Bean配置
-Bean的初始化
兩個(gè)包 1.org.springframework.beans org.springframework.context
BeanFactory 提供配置結(jié)構(gòu)和基本功能,加載并初始化Bean
ApplicationContext 保存了Bean對(duì)象并在Spring中被廣泛使用
ApplicationContext
-本地文件 FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/worksapace/application.xml");
-Classpath ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("calsspath:spring-context.xml");
-Web應(yīng)用中依賴servlet或Listener
spring 容器 加載 ioc
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
spring MVC 加載 ioc 可以不使用spring 容器
seckill-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/spring-*.xml
seckill-dispatcher
/
-Spring的常用注入方式
1.IOC控制反轉(zhuǎn):控制權(quán)的轉(zhuǎn)移,應(yīng)用程序本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建和維護(hù),而是由外部容器(Spring Container或者 Spring MVC 子容器)
負(fù)責(zé)創(chuàng)建和維護(hù)
-到底哪些方面的控制被反轉(zhuǎn)了呢:獲得依賴對(duì)象的過(guò)程被反轉(zhuǎn)了 控制被反轉(zhuǎn)之后,獲得依賴對(duì)象的過(guò)程由自身管理變?yōu)橛蒊OC容器主動(dòng)注入
依賴注入:就是IOC容器在運(yùn)行期間,動(dòng)態(tài)的將某種依賴關(guān)系注入到對(duì)象之中
2.DI依賴注入 是一種實(shí)現(xiàn)方式
目的:創(chuàng)建對(duì)象并且組裝對(duì)象之間的關(guān)系
特點(diǎn):不關(guān)心對(duì)象的創(chuàng)建 只去使用
3.Spring 注入
-spring 注入是指在啟動(dòng)Spring容器加載bean配置的時(shí)候,完成對(duì)變量的賦值行為
-常用的兩種注入方式
1、設(shè)值注入 就是set 通過(guò)xml配置文件進(jìn)行設(shè)置
2、構(gòu)造注入
三、Spring Bean
-Bean 配置項(xiàng)
id:在整個(gè)ioc容器中這個(gè)bean的唯一標(biāo)識(shí)
class:具體要實(shí)例化的哪個(gè)類
scope:范圍
-singleon:單例,只一個(gè)Bean容器照片那個(gè)只存在一份
-protoptype:每次請(qǐng)求(每次使用)創(chuàng)建新的實(shí)例,destroy方式不生效
-request:每次http請(qǐng)求創(chuàng)建一個(gè)實(shí)例且盡在當(dāng)前request內(nèi)有效
-session:每次http請(qǐng)求創(chuàng)建一個(gè)實(shí)例且盡在當(dāng)前session內(nèi)有效
-global session:基于portlet的web中有效(portlet定義了 global session) 如果在web中,同session
constructor arguments:
Properties: 屬性
Autowiring mode:自動(dòng)裝配模式
lazy-initialization mode:懶加載模式
Initialization/destruction method 初始化 和銷毀的方法
-Bean 作用域
-singleon:單例,只一個(gè)Bean容器照片那個(gè)只存在一份
-protoptype:每次請(qǐng)求(每次使用)創(chuàng)建新的實(shí)例,destroy方式不生效
-request:每次http請(qǐng)求創(chuàng)建一個(gè)實(shí)例且盡在當(dāng)前request內(nèi)有效
-session:每次http請(qǐng)求創(chuàng)建一個(gè)實(shí)例且盡在當(dāng)前session內(nèi)有效
-global session:基于portlet的web中有效(portlet定義了 global session) 如果在web中,同session
-Bean 生命周期
1-定義
2-初始化
-實(shí)現(xiàn)org.springframework.beans.factory.InitalizingBean接口,覆蓋afterPropertiesSet方法
Public class RedisDao implements InitalizingBean{
@Override
public void afterPropertiesSet() throws Exception{
}
}
-配置 init-method
該類里面有個(gè)init()方法 會(huì)自動(dòng)執(zhí)行在創(chuàng)建該類時(shí)候
3-使用
4-銷毀
-實(shí)現(xiàn)org.springframework.beans.factory.DisposableBean接口,覆蓋destroy方法
Public class RedisDao implements InitalizingBean{
@Override
public void destroy() throws Exception{
}
}
-配置 init-method
該類里面有個(gè)destroy()方法 會(huì)自動(dòng)執(zhí)行在創(chuàng)建該類時(shí)候
總結(jié)
1,默認(rèn)全局的初始化和銷毀方法;
2,實(shí)現(xiàn)接口的初始化和銷毀方法;
3,配置文件中配置初始化和銷毀方法;
這三個(gè)方法同時(shí)使用時(shí),1默認(rèn)的則不執(zhí)行,而23兩種都會(huì)執(zhí)行,并且是2實(shí)現(xiàn)接口的方式先于配置中3的執(zhí)行。
1默認(rèn)的全局初始化和銷毀方法可以有可以沒(méi)有,有沒(méi)有對(duì)配置都沒(méi)有太大影響,當(dāng)然如果一個(gè)bean沒(méi)有采取23初始化銷毀方法,
而有1默認(rèn)的方法的話,這兩個(gè)方法還是會(huì)執(zhí)行的。即使沒(méi)有,系統(tǒng)也不會(huì)報(bào)錯(cuò)。
-Bean 自動(dòng)裝配(Autowiring)
-No:不做任何操作
-byname:根據(jù)屬性名自動(dòng)裝配,此選項(xiàng)將檢查容器并根據(jù)名字查找與屬性完全一致的bean,并肩器與屬性自動(dòng)裝配
//此類中有 封裝的屬性值 和其set方法
//或者可以通過(guò) 表頭的命名空間進(jìn)行配置 default-autowrie="byBane" 其他都不默認(rèn)配置了
-byType:如果容器中存在一個(gè)與指定屬性類型相同的bean,那么將于該屬性自動(dòng)裝配;如果存在多個(gè)該類型bean,那么拋出異常
并指出不能使用byType方式進(jìn)行自動(dòng)裝配,如果沒(méi)有找到相匹配的bean,則是么事都不發(fā)生
-Constructor:與byType方式類似,不同之處在于他應(yīng)用于構(gòu)造器參數(shù)如果容器中沒(méi)有找到與構(gòu)造器參數(shù)類型一直的bean,拋出異常
-Resources&ResourceLoader
Resources 支隊(duì)于資源文件的統(tǒng)一接口
-UrlResource:URL對(duì)應(yīng)的資源,根據(jù)一個(gè)URL地址即可構(gòu)建
-ClassPathResource:獲得類路徑下的資源文件(也即是classpath下的)
-FileSystemResource:獲取文件系統(tǒng)里面的資源
-ServletContextResource:ServletContext封裝的資源,用于訪問(wèn)ServletContext環(huán)境下的資源(web相關(guān)的)
-InputStreamResource:針對(duì)輸入流封裝的資源
-ByteArrayResource:針對(duì)于地接數(shù)組封裝的資源
ResourceLoader 加載資源的 所有的applicationContext都實(shí)現(xiàn)了該接口 都可以獲取Resource實(shí)例
public interface ResourceLoader{
Resource getResource(String location);
}
圖
開(kāi)始圖
1.bean 類 實(shí)現(xiàn)ApplicationContextAware 所有的applicationContext都實(shí)現(xiàn)了該接口 都可以獲取Resource實(shí)例
applicationConext.getResource();有4中
測(cè)試類
-Aware 這個(gè)暫時(shí)忽略 沒(méi)用到過(guò)(上面再實(shí)現(xiàn)Resource時(shí)候就是用Aware)
-Spring 中提供了一些以Aware結(jié)尾的接口,實(shí)現(xiàn)了Aware接口的bean在初始化之后,可以獲取相應(yīng)的資源
-通過(guò)Aware接口,可以對(duì)Spring想用資源進(jìn)行操作(一定要慎重)
-為對(duì)Spring進(jìn)行簡(jiǎn)單的擴(kuò)展提供了方面的入口
-ApplicationContextAware 實(shí)現(xiàn)了此接口的類會(huì)提供 spring contxt 上下文的信息 實(shí)現(xiàn)類必須配置到spring的配置文件中去(bean容器加載)
-BeanNameAware 同上
-Bean管理的注解 實(shí)現(xiàn)及例子
-Classpath掃描與組件管理
-從Spring3.0開(kāi)始,Spring JavaConfig項(xiàng)目提供了很多特性,包括使用Java而不是XML 定義bean,比如
@Configuration @Bean @Import @DependsOn
-@Component是Spring的通用注解 可用于任何bean
-@Repository @service @Controller是更有針對(duì)性的注解1.@Repository通常用于注解Dao類,即持久層
br/>1.@Repository通常用于注解Dao類,即持久層
br/>3.@Controller通常用于Controller類,即控制層(MVC)
注解
-bean的掃描類
1.測(cè)試類 注解@Scope默認(rèn)單例 @Component 默認(rèn)類名首字母小寫(可自定義)
1.注解@Component @Repository @Service @Controller 2必須的@Required
br/>必須的@Required
自動(dòng)裝配@Autowried
br/>自動(dòng)裝配@Autowried
圖片
3種注入方式
1.配置文件 掃描該包下的 4個(gè)文件 一個(gè)接口兩個(gè)實(shí)現(xiàn)類 還有一個(gè)BeanInvoke類
2.裝配的類
3.測(cè)試類和結(jié)果 裝配的 list 和 map 都是泛型的實(shí)現(xiàn)類并且都是同一個(gè)對(duì)象(因?yàn)槭褂玫氖悄J(rèn)單例) BeanInterface的實(shí)現(xiàn)類無(wú)論是單例還是prototype 不會(huì)改變list map里面的 對(duì)象 都是同一個(gè)對(duì)象 key就是 bean id 在實(shí)現(xiàn)類上添加@Order(value=1) list 會(huì)進(jìn)行排序小->大
我 Autowired 和Qualifier 裝配 過(guò)濾一起用
在類中配置
在xml中 配置
自定義注解
使用Xml配置
-javabean 基于java的容器注解說(shuō)明 通過(guò)注解@bean 或者xml 配置ben id="" class="" 效果一樣
我的實(shí)驗(yàn)
圖1實(shí)體類
圖2邏輯類
圖3配置(實(shí)體類不用背掃描就可以 因?yàn)樗麤](méi)有注解)
圖4 測(cè)試結(jié)果
-1.ImportResource(讀取資源) Bean value 三個(gè)注解一起使用
加載properties文件的xml
基礎(chǔ)的類
整合效果類
結(jié)果類
-2propertySource 可以代替 ImportResource 更簡(jiǎn)單
實(shí)體類
效果整合類
測(cè)試顯示 同上一樣
-3 使用一個(gè)ioc容器
實(shí)體類
整合效果類
效果測(cè)試類 同上
-1Configuration和Bean 和scope
圖 配置文件
實(shí)體類
效果整合類
測(cè)試結(jié)果
-1.基于泛型的自動(dòng)裝配
配置文件
接口類
實(shí)例1
實(shí)例2
整合效果類
測(cè)試類
-1Autowired 和 Qualifire擴(kuò)展 沒(méi)有例子展示
-bean 裝配 spring 對(duì) jsr標(biāo)準(zhǔn)的支持
圖1這個(gè)Resource 可以對(duì)對(duì)象和 方法都可以注入 (name="",type=JsrService.class)類型和name一起確定唯一 通常使用 byName的 Autowired是byType Reource是java注解
下面是測(cè)試
配置文件
測(cè)試結(jié)果
-jsr330支持
測(cè)試 其他 同上
總結(jié)回顧
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。