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" > <constructor-arg index="0" value="https://www.cnblogs.com/kevints/archive/2022/02/15/kevin"/> </bean> - 型別(不推薦)
<constructor-arg type="java.lang.String" value="https://www.cnblogs.com/kevints/archive/2022/02/15/勞務"/> - 引數名
<constructor-arg name="name" value="https://www.cnblogs.com/kevints/archive/2022/02/15/kevin"/>
- 下標賦值
總結:在組態檔加載的時候,容器中管理的物件就已經初始化了,
4.Spring配置
4.1 Bean配置
<bean id="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="https://www.cnblogs.com/kevints/archive/2022/02/15/勞務"/> - Bean注入
<bean id="address" > <property name="address" value="https://www.cnblogs.com/kevints/archive/2022/02/15/西安"/> </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="https://www.cnblogs.com/kevints/archive/2022/02/15/7437583248024"/> <entry key="駕駛證" value="https://www.cnblogs.com/kevints/archive/2022/02/15/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="http://www.springframework.org/schema/p"
<bean name="john-modern" class="com.example.Person" p:name="John Doe" p:spouse-ref="jane"/>
xmlns:c="http://www.springframework.org/schema/c"
5.4 bean的作用域

- 單例模式(Spring默認機制)
<bean id="user" scope="singleton"/> - 原型模式:每次從容器中get的時候,都會產生一個新物件 prototype
- 其余的request、session、application 這些只能在web開發中使用
6.Bean的自動裝配
自動裝配是Spring滿足bean依賴一鐘方式
spring會在背景關系中自動尋找,并自動給bean裝配屬性!
6.1 在Spring中有三種裝配的方式
- 在xml中顯示的設定
- 在java中顯示配置
new AnnotationConfigApplicationContext(KevinConfig.class)
- 隱式的自動裝配bean*
-
- bean有個屬性autowire
- byName:會自動在容器背景關系中查找,和自己物件set方法后面值對應的bean的id(id唯一)
- byType:會自動在容器背景關系中查找,和自己物件屬性型別相同的bean(class唯一)
6.2 使用注解實作自動裝配
- 匯入約束:context約束
查看代碼
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> </beans> - 配置注解支持:<context:annotation-config/>
- 注解說明
-
- @Autowired: 自動裝配通過型別或者名字 如果Autowired不能唯一自動裝配上屬性,則需要通過@Qualifier("xxx");
- @Resource: 自動裝配先通過名字后型別
- @Nullable: 欄位標記了這個注解,則說明這個欄位可以為null
- @Component 組件 等價于 <bean id="user" />
- @Value("xxx") 相當于<property name="name" value="https://www.cnblogs.com/kevints/archive/2022/02/15/xxx"/>
- @Component有幾個衍生注解,我們在web開發中,會按照mvc三層架構分層!
- dao 【@Repository】
- service 【@Service】
- controller(servlet)【@Controller】
- 這四個注解的功能都是一樣的,都是代表將某個類注冊到Spring中,裝配Bean
- @Scope(“xxx”)作用域
<context:annotation-config/>
<!--指定要掃描的包,這個包下的注解會生效-->
<context:component-scan base-package="com.kevin"/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/423910.html
標籤:其他
