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創建對象的方式
- 使用無參構造創建對象,默認!
- 要使用有參構造創建對象。
-
- 下標賦值
<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對象中的所有屬性,由容器來注入!
- 普通注入
<property name="name" value="勞務"/> - Bean注入
<bean id="address" class="com.kevin.pojo.Address"> <property name="address" value="西安"/> </bean> <property name="address" ref="address"/> - 數組
<property name="books"> <array> <value>西遊記</value> <value>三國演義</value> <value>紅樓夢</value> <value>水滸傳</value> </array> </property> - List
<property name="hobbys"> <list> <value>聽歌</value> <value>敲程式碼</value> <value>看電視</value> </list> </property> - Map
<property name="card"> <map> <entry key="身份證" value="7437583248024"/> <entry key="駕駛證" value="437583248024s"/> </map> </property> - Set
<property name="games"> <set> <value>LOL</value> <value>COC</value> <value>BOB</value> </set> </property> - null
<property name="wife"> <null/> </property> - 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的作用域

- 單例模式(Spring默認機制)
<bean id="user" class="com.kevin.pojo.User" scope="singleton"/> - 原型模式:每次從容器中get的時候,都會產生一個新對象 prototype
- 其餘的request、session、application 這些只能在web開發中使用
6.Bean的自動裝配
自動裝配是Spring滿足bean依賴一鍾方式
spring會在上下文中自動尋找,並自動給bean裝配屬性!
6.1 在Spring中有三種裝配的方式
- 在xml中顯示的設置
- 在java中顯示配置
- 隱式的自動裝配bean*
-
- bean有個屬性autowire
- byName:會自動在容器上下文中查找,和自己對象set方法後面值對應的bean的id(id唯一)
- byType:會自動在容器上下文中查找,和自己對象屬性類型相同的bean(class唯一)
6.2 使用註解實現自動裝配
- 導入約束: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> - 配置註解支援:<context:annotation-config/>
- 註解說明
-
- @Autowired: 自動裝配通過類型或者名字 如果Autowired不能唯一自動裝配上屬性,則需要通過@Qualifier("xxx");
- @Resource: 自動裝配先通過名字後類型
- @Nullable: 欄位標記了這個註解,則說明這個欄位可以為null

