Spring學習

  • 2022 年 2 月 14 日
  • 筆記

Spring

1.簡介

Spring是一個輕量級控制反轉(IOC)和面向切面(AOP)的容器框架

spring理念:使現有的技術更加容易使用,整合了現有的技術框架。

優點:

  • Spring是一個開源的免費的框架(容器)!
  • Spring是一個輕量級的,非入侵式的框架.
  • 控制反轉(IOC)面向切面編程(AOP)
  • 支援事務的處理,對框架整合的支援

其他(先了解):

  • Spring Boot 一個快速開發的腳手架,基於Spring Boot可以快速的開發單個微服務(約定大於配置)
  • Spring Cloud 是基於Spring Boot實現

2.IOC理論推導

IOC本質: 控制反轉IOC是一種設計思想,DI(依賴注入)是實現IOC的一種方法。

控制反轉就是獲得依賴對象的方式反轉。

控制反轉是一種通過描述(xml或註解)並通過第三方去生產或獲取特定對象的方式。在Spring中實現控制反轉的是IOC容器,其實現方法是依賴注入。 依賴注入:就是利用set方法來進行注入的。

Spring只需要在xml的配置而文件中進行修改,對象由Spring來創建、管理、裝配!

3.IOC創建對象的方式

  1. 使用無參構造創建對象,默認!
  2. 要使用有參構造創建對象。
    • 下標賦值 
      <bean id="user" class="com.kevin.pojo.User">
          <constructor-arg index="0" value="kevin"/>
      </bean>
    • 類型(不推薦)
      <constructor-arg type="java.lang.String" value="勞務"/>
    • 參數名 
      <constructor-arg name="name" value="kevin"/>

總結:在配置文件載入的時候,容器中管理的對象就已經初始化了。

4.Spring配置

4.1 Bean配置

<bean id="user" class="com.kevin.pojo.User" name="user1,user2 user3;user4"/>

id:bean的唯一標識符,也相當於我們學過的對象名

class:bean對象所對應的全限定名:包名+類型

name:別名,而且name可以同時取多個別名

4.2 import

可以將多個配置文件,導入合併一個

規範命名: applicationContext.xml

5.依賴注入

5.1 構造器注入 constructor-arg

5.2 Set方式注入【重點】

依賴注入:Set注入

依賴:bean對象的創建依賴於容器

注入:bean對象中的所有屬性,由容器來注入!

  1. 普通注入  
    <property name="name" value="勞務"/>
  2. Bean注入 
    <bean id="address" class="com.kevin.pojo.Address">
        <property name="address" value="西安"/>
    </bean>
    <property name="address" ref="address"/>
  3. 數組 
    <property name="books">
        <array>
            <value>西遊記</value>
            <value>三國演義</value>
            <value>紅樓夢</value>
            <value>水滸傳</value>
        </array>
    </property>
  4. List 
    <property name="hobbys">
        <list>
            <value>聽歌</value>
            <value>敲程式碼</value>
            <value>看電視</value>
        </list>
    </property>
  5. Map 
    <property name="card">
        <map>
            <entry key="身份證" value="7437583248024"/>
            <entry key="駕駛證" value="437583248024s"/>
        </map>
    </property>
  6. Set 
    <property name="games">
        <set>
            <value>LOL</value>
            <value>COC</value>
            <value>BOB</value>
        </set>
    </property>
  7. null 
    <property name="wife">
        <null/>
    </property>
  8. Properties 
    <property name="info">
        <props>
            <prop key="driver">location</prop>
            <prop key="url">...</prop>
            <prop key="username">root</prop>
            <prop key="password">123456</prop>
        </props>
    </property>

5.3 拓展注入

使用p命令空間和c命令空間進行注入

注意點:p命令和c命名空間不能直接使用,需要導入xml約束

xmlns:p="//www.springframework.org/schema/p"

<bean name="john-modern" class="com.example.Person" p:name="John Doe" p:spouse-ref="jane"/>

 xmlns:c="//www.springframework.org/schema/c"

5.4 bean的作用域

  1. 單例模式(Spring默認機制)
    <bean id="user" class="com.kevin.pojo.User" scope="singleton"/>
  2. 原型模式:每次從容器中get的時候,都會產生一個新對象 prototype
  3. 其餘的request、session、application 這些只能在web開發中使用

6.Bean的自動裝配

自動裝配是Spring滿足bean依賴一鍾方式

spring會在上下文中自動尋找,並自動給bean裝配屬性!

6.1 在Spring中有三種裝配的方式

  1. 在xml中顯示的設置
  2. 在java中顯示配置
  3. 隱式的自動裝配bean*
    • bean有個屬性autowire
    • byName:會自動在容器上下文中查找,和自己對象set方法後面值對應的bean的id(id唯一)
    • byType:會自動在容器上下文中查找,和自己對象屬性類型相同的bean(class唯一)

6.2 使用註解實現自動裝配 

  1. 導入約束:context約束 
    查看程式碼
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="//www.springframework.org/schema/beans"
        xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
        xmlns:context="//www.springframework.org/schema/context"
        xsi:schemaLocation="//www.springframework.org/schema/beans
            //www.springframework.org/schema/beans/spring-beans.xsd
            //www.springframework.org/schema/context
            //www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config/>
    
    </beans>
  2. 配置註解支援:<context:annotation-config/>
  3. 註解說明 
    • @Autowired: 自動裝配通過類型或者名字 如果Autowired不能唯一自動裝配上屬性,則需要通過@Qualifier("xxx");
    • @Resource: 自動裝配先通過名字後類型
    • @Nullable: 欄位標記了這個註解,則說明這個欄位可以為null
Tags: