您好,登錄后才能下訂單哦!
一、Spring 概述
1.Spring 是一個開源框架,為了解決企業應用開發的復雜性而創建的,但現在已經不止應用與企業應用
2.Spring 是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器框架
-從大小與開銷兩反面而言兩反面Spring都是輕量的
-通過控制反轉的技術達到解耦的目的
-提供了面向切面變成的豐富支持,允許通過分離應用的業務邏輯與系統級服務進行內聚性的開發
-包含并管理應用對象的配置和聲明周期,這個意義上是一種容器
-將簡單的組件配置、組合成為復雜的應用,這個意義上是框架
3.Spring 開發應用 簡單、方面、快捷 Spring
3.1框架的特點
-半成品
-封裝了特定的處理流程和邏輯控制
-成熟的、不斷改進的軟件
框架與類庫的區別
-框架一般是封裝了邏輯、高內聚的、類庫則是松散的工具組合
-框架專注于某一領域,類庫則是更通用的
3.2為什么使用框架
-軟件系統日趨復雜
-重用度高,開發效率和質量提高
-軟件設計人員要專注于對領域的了解,使需求分析更充分
-易于上手,快速解決問題
二、Spring IOC
專題一 IOC
-接口及面向接口變成
-什么事IOC
-Spring的Bean配置
-Bean的初始化
兩個包 1.org.springframework.beans org.springframework.context
BeanFactory 提供配置結構和基本功能,加載并初始化Bean
ApplicationContext 保存了Bean對象并在Spring中被廣泛使用
ApplicationContext
-本地文件 FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/worksapace/application.xml");
-Classpath ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("calsspath:spring-context.xml");
-Web應用中依賴servlet或Listener
spring 容器 加載 ioc
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
spring MVC 加載 ioc 可以不使用spring 容器
<servlet>
<servlet-name>seckill-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>seckill-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
-Spring的常用注入方式
1.IOC控制反轉:控制權的轉移,應用程序本身不負責依賴對象的創建和維護,而是由外部容器(Spring Container或者 Spring MVC 子容器)
負責創建和維護
-到底哪些方面的控制被反轉了呢:獲得依賴對象的過程被反轉了 控制被反轉之后,獲得依賴對象的過程由自身管理變為由IOC容器主動注入
依賴注入:就是IOC容器在運行期間,動態的將某種依賴關系注入到對象之中
2.DI依賴注入 是一種實現方式
目的:創建對象并且組裝對象之間的關系
特點:不關心對象的創建 只去使用
3.Spring 注入
-spring 注入是指在啟動Spring容器加載bean配置的時候,完成對變量的賦值行為
-常用的兩種注入方式
1、設值注入 就是set 通過xml配置文件進行設置
<bean id="injesctionService" class="org.seckill.dao.injection.service.InjectionServiceImpl">
<property name="injectionDao" ref="injectionDao"/>
</bean>
<bean id="injectionDao" class="org.seckill.dao.injection.dao.InjectionDaoImpl"/>
2、構造注入
<bean id="injesctionService" class="org.seckill.dao.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDao" ref="injectionDao"/>
</bean>
<bean id="injectionDao" class="org.seckill.dao.injection.dao.InjectionDaoImpl"/>
三、Spring Bean
-Bean 配置項
id:在整個ioc容器中這個bean的唯一標識
class:具體要實例化的哪個類
scope:范圍
-singleon:單例,只一個Bean容器照片那個只存在一份
-protoptype:每次請求(每次使用)創建新的實例,destroy方式不生效
-request:每次http請求創建一個實例且盡在當前request內有效
-session:每次http請求創建一個實例且盡在當前session內有效
-global session:基于portlet的web中有效(portlet定義了 global session) 如果在web中,同session
constructor arguments:
Properties: 屬性
Autowiring mode:自動裝配模式
lazy-initialization mode:懶加載模式
Initialization/destruction method 初始化 和銷毀的方法
-Bean 作用域
-singleon:單例,只一個Bean容器照片那個只存在一份
-protoptype:每次請求(每次使用)創建新的實例,destroy方式不生效
-request:每次http請求創建一個實例且盡在當前request內有效
-session:每次http請求創建一個實例且盡在當前session內有效
-global session:基于portlet的web中有效(portlet定義了 global session) 如果在web中,同session
-Bean 生命周期
1-定義
2-初始化
-實現org.springframework.beans.factory.InitalizingBean接口,覆蓋afterPropertiesSet方法
Public class RedisDao implements InitalizingBean{
@Override
public void afterPropertiesSet() throws Exception{
}
}
-配置 init-method
<bean id="redisDao" class = "org.seckill.dao.RedisDao" init-method="init"/> 該類里面有個init()方法 會自動執行在創建該類時候
3-使用
4-銷毀
-實現org.springframework.beans.factory.DisposableBean接口,覆蓋destroy方法
Public class RedisDao implements InitalizingBean{
@Override
public void destroy() throws Exception{
}
}
-配置 init-method
<bean id="redisDao" class = "org.seckill.dao.RedisDao" destroy-method="destroy"/> 該類里面有個destroy()方法 會自動執行在創建該類時候
總結
1,默認全局的初始化和銷毀方法;
2,實現接口的初始化和銷毀方法;
3,配置文件中配置初始化和銷毀方法;
這三個方法同時使用時,1默認的則不執行,而23兩種都會執行,并且是2實現接口的方式先于配置中3的執行。
1默認的全局初始化和銷毀方法可以有可以沒有,有沒有對配置都沒有太大影響,當然如果一個bean沒有采取23初始化銷毀方法,
而有1默認的方法的話,這兩個方法還是會執行的。即使沒有,系統也不會報錯。
-Bean 自動裝配(Autowiring)
-No:不做任何操作
-byname:根據屬性名自動裝配,此選項將檢查容器并根據名字查找與屬性完全一致的bean,并肩器與屬性自動裝配
<bean id="dao" class="com.etoak.dao.DaoImpl"></bean>
//此類中有 封裝的屬性值 和其set方法
//或者可以通過 表頭的命名空間進行配置 default-autowrie="byBane" 其他都不默認配置了
<bean id="action" class="com.etoak.action.LoginAction" init-method="init">
<property name="di" ref="dao"></property>
</bean>
-byType:如果容器中存在一個與指定屬性類型相同的bean,那么將于該屬性自動裝配;如果存在多個該類型bean,那么拋出異常
并指出不能使用byType方式進行自動裝配,如果沒有找到相匹配的bean,則是么事都不發生
-Constructor:與byType方式類似,不同之處在于他應用于構造器參數如果容器中沒有找到與構造器參數類型一直的bean,拋出異常
-Resources&ResourceLoader
Resources 支隊于資源文件的統一接口
-UrlResource:URL對應的資源,根據一個URL地址即可構建
-ClassPathResource:獲得類路徑下的資源文件(也即是classpath下的)
-FileSystemResource:獲取文件系統里面的資源
-ServletContextResource:ServletContext封裝的資源,用于訪問ServletContext環境下的資源(web相關的)
-InputStreamResource:針對輸入流封裝的資源
-ByteArrayResource:針對于地接數組封裝的資源
ResourceLoader 加載資源的 所有的applicationContext都實現了該接口 都可以獲取Resource實例
public interface ResourceLoader{
Resource getResource(String location);
}
圖
開始圖
1.bean 類 實現ApplicationContextAware 所有的applicationContext都實現了該接口 都可以獲取Resource實例
applicationConext.getResource();有4中
測試類
-Aware 這個暫時忽略 沒用到過(上面再實現Resource時候就是用Aware)
-Spring 中提供了一些以Aware結尾的接口,實現了Aware接口的bean在初始化之后,可以獲取相應的資源
-通過Aware接口,可以對Spring想用資源進行操作(一定要慎重)
-為對Spring進行簡單的擴展提供了方面的入口
-ApplicationContextAware 實現了此接口的類會提供 spring contxt 上下文的信息 實現類必須配置到spring的配置文件中去(bean容器加載)
-BeanNameAware 同上
-Bean管理的注解 實現及例子
-Classpath掃描與組件管理
-從Spring3.0開始,Spring JavaConfig項目提供了很多特性,包括使用Java而不是XML 定義bean,比如
@Configuration @Bean @Import @DependsOn
-@Component是Spring的通用注解 可用于任何bean
-@Repository @service @Controller是更有針對性的注解1.@Repository通常用于注解Dao類,即持久層
br/>1.@Repository通常用于注解Dao類,即持久層
br/>3.@Controller通常用于Controller類,即控制層(MVC)
注解<context:annotation-config/>
-bean的掃描類
1.測試類 注解@Scope默認單例 @Component 默認類名首字母小寫(可自定義)
1.注解@Component @Repository @Service @Controller 2必須的@Required
br/>必須的@Required
自動裝配@Autowried
br/>自動裝配@Autowried
圖片
3種注入方式
1.配置文件 掃描該包下的 4個文件 一個接口兩個實現類 還有一個BeanInvoke類
2.裝配的類
3.測試類和結果 裝配的 list 和 map 都是泛型的實現類并且都是同一個對象(因為使用的是默認單例) BeanInterface的實現類無論是單例還是prototype 不會改變list map里面的 對象 都是同一個對象 key就是 bean id 在實現類上添加@Order(value=1) list 會進行排序小->大
我 Autowired 和Qualifier 裝配 過濾一起用
在類中配置
在xml中 配置
自定義注解
使用Xml配置
-javabean 基于java的容器注解說明 通過注解@bean 或者xml 配置ben id="" class="" 效果一樣
我的實驗
圖1實體類
圖2邏輯類
圖3配置(實體類不用背掃描就可以 因為他沒有注解)
圖4 測試結果
-1.ImportResource(讀取資源) Bean value 三個注解一起使用
加載properties文件的xml
基礎的類
整合效果類
結果類
-2propertySource 可以代替 ImportResource 更簡單
實體類
效果整合類
測試顯示 同上一樣
-3 使用一個ioc容器
實體類
整合效果類
效果測試類 同上
-1Configuration和Bean 和scope
圖 配置文件
實體類
效果整合類
測試結果
-1.基于泛型的自動裝配
配置文件
接口類
實例1
實例2
整合效果類
測試類
-1Autowired 和 Qualifire擴展 沒有例子展示
-bean 裝配 spring 對 jsr標準的支持
圖1這個Resource 可以對對象和 方法都可以注入 (name="",type=JsrService.class)類型和name一起確定唯一 通常使用 byName的 Autowired是byType Reource是java注解
下面是測試
配置文件
測試結果
-jsr330支持
測試 其他 同上
總結回顧
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。