Spring的概念詳解

一、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);
}

Spring的概念詳解
Spring的概念詳解
開始圖
Spring的概念詳解
1.bean 類 實現ApplicationContextAware 所有的applicationContext都實現了該接口 都可以獲取Resource實例
Spring的概念詳解
applicationConext.getResource();有4中
Spring的概念詳解
測試類Spring的概念詳解

-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是更有針對性的註解br/>1.@Repository通常用於註解Dao類,即持久層
2.@Service通常用於註解Service類,即fuwuceng
br/>3.@Controller通常用於Controller類,即控制層(MVC)
-類的自動檢測與註冊Bean
註解<context:annotation-config/>
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
-bean的掃描類
Spring的概念詳解
1.測試類 註解@Scope默認單例 @Component 默認類名首字母小寫(可自定義)
Spring的概念詳解
1.註解@Component @Repository @Service @Controller 2
br/>必須的@Required
Spring的概念詳解
br/>自動裝配@Autowried
Spring的概念詳解
圖片

Spring的概念詳解
3種注入方式
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
1.配置文件 掃描該包下的 4個文件 一個接口兩個實現類 還有一個BeanInvoke類
Spring的概念詳解
2.裝配的類
Spring的概念詳解
3.測試類和結果 裝配的 list 和 map 都是泛型的實現類並且都是同一個對象(因爲使用的是默認單例) BeanInterface的實現類無論是單例還是prototype 不會改變list map裏面的 對象 都是同一個對象 key就是 bean id 在實現類上添加@Order(value=1) list 會進行排序小->大
Spring的概念詳解
我 Autowired 和Qualifier 裝配 過濾一起用
Spring的概念詳解
在類中配置
Spring的概念詳解
在xml中 配置
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
自定義註解
Spring的概念詳解
使用Xml配置
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
-javabean 基於java的容器註解說明 通過註解@bean 或者xml 配置ben id="" class="" 效果一樣
Spring的概念詳解
Spring的概念詳解
我的實驗
圖1實體類
Spring的概念詳解
圖2邏輯類Spring的概念詳解
圖3配置(實體類不用背掃描就可以 因爲他沒有註解)
Spring的概念詳解
圖4 測試結果
Spring的概念詳解

-1.ImportResource(讀取資源) Bean value 三個註解一起使用
Spring的概念詳解
加載properties文件的xml
Spring的概念詳解
基礎的類
Spring的概念詳解
整合效果類
Spring的概念詳解
結果類
Spring的概念詳解
-2propertySource 可以代替 ImportResource 更簡單
Spring的概念詳解
實體類
Spring的概念詳解
效果整合類
Spring的概念詳解
測試顯示 同上一樣Spring的概念詳解
-3 使用一個ioc容器
Spring的概念詳解
實體類
Spring的概念詳解
整合效果類
Spring的概念詳解
效果測試類 同上
-1Configuration和Bean 和scope
Spring的概念詳解
圖 配置文件
Spring的概念詳解
實體類
Spring的概念詳解
Spring的概念詳解
效果整合類
Spring的概念詳解
測試結果
Spring的概念詳解
-1.基於泛型的自動裝配
Spring的概念詳解
配置文件
Spring的概念詳解
接口類
Spring的概念詳解
實例1
Spring的概念詳解
實例2
Spring的概念詳解
整合效果類
Spring的概念詳解
測試類
Spring的概念詳解
-1Autowired 和 Qualifire擴展 沒有例子展示
Spring的概念詳解
-bean 裝配 spring 對 jsr標準的支持
圖1這個Resource 可以對對象和 方法都可以注入 (name="",type=JsrService.class)類型和name一起確定唯一 通常使用 byName的 Autowired是byType Reource是java註解
Spring的概念詳解

Spring的概念詳解
Spring的概念詳解
下面是測試
配置文件
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
測試結果
Spring的概念詳解
-jsr330支持
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
Spring的概念詳解
測試 其他 同上
Spring的概念詳解

總結回顧
Spring的概念詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章