Spring的一些知識1

Spring的一些知識

ApplicationContext的三個經常使用實現類

ClassPathXmlApplicationContext:能夠加載類路徑下的配置文件
FileSystemXmlApplicationContext:能夠加載磁盤任意路徑下的配置文件(要有訪問權限)
AnnotationConfigApplicationContext:讀取註解建立容器
複製代碼

核心容器的兩個接口引起出的問題php

ApplicationContext: 單例對象使用 他在構建核心容器時,建立對象的策略是當即加載讀取完配置文件就建立配置文件中的對象java

BeanFactory:web

​ 延遲加載的策略,根據Id獲取對象了纔開始建立對象spring

建立bean的三種方式

1.使用默認構造函數建立

在spring的配置中使用bean標籤,配以id和class屬性以後,且沒有其餘屬性和標籤時.採用的就是默認構造函數建立bean對象,此時若是類中沒有默認構造函數則沒法建立數組

<bean id = "實際建立的對象名" class="對象類"></bean>
複製代碼

2.使用普通工廠中的方法建立對象

<bean id = "工廠類名" class="工廠方法類"></bean>
<bean id = "實際建立的對象名" factory-bean = "工廠類名" facatory-method = "工廠類內的構建方法 "></bean>
複製代碼

3.使用工廠中的靜態方法建立對象

<bean id = "實際建立的對象名 " class = "工廠方法類" facatory-method = "工廠內的靜態方法"></bean>
複製代碼

bean的做用範圍

bean標籤的scope屬性:

1)singleton(單例)session

2)prototype(多例)函數

3)request(做用於web應用的請求範圍)spa

4)session(做用於web應用的會話範圍)prototype

5)global-session(做用於集羣的會話範圍若是沒有則是session)code

bean對象的生命週期

單例對象:

1)出生:當容器建立是對象出生

2)存在:只要容器還在,對象存在

3)死亡:容器銷燬,對象死亡

4)總結:與容器生命週期相同

多例對象:

1)出生:使用對象時建立對象

2)存在:對象在使用過程當中就存在

3)死亡:對象長時間沒用由Java的垃圾回收機制

Spring的依賴注入Dependecy Injection

能注入的數據有三類:

1)基本類型和String

2)其餘bean類型(在配置文件中或註解配置過的bean)

3)複雜類型/集合類型

注入方式三種:

1)使用構造函數提供

2)使用set方法提供

3)使用註解提供

1.構造函數注入

1)使用標籤:constructor-arg

2)標籤出現的位置:bean標籤的內部

3)標籤中的屬性

type:用於指定要注入的數據的數據類型

index:用於指定要注入的數據給構造函數中指定索引位置的參數賦值,索引的位置從0開始

name:用於指定給構造函數中指定名字的參數賦值

value:用於給基本類型和String類型的數據

ref:其餘的bean類型數據
複製代碼
<bean id = " " class = " ">
	<constructor-arg name = " " value = " "></constructor-arg>
    <constructor-arg name = " " ref = "a"></constructor-arg>
</bean>
<bean id = "a" class = " "></bean>
複製代碼

2.set方法

1)標籤:property

2)出現的位置:bean標籤的內部

3)標籤的屬性:

name:用於指定給構造函數中指定名字的參數賦值

value:用於給基本類型和String類型的數據

ref:其餘的bean類型數據
複製代碼
<bean id = " " class = " ">
	<property name = " " value = " "></property>
	<property name = " " ref = " "></property>
</bean>

複製代碼

3.複雜類型的注入

<bean id = " " class = " ">
	<property name = " 一個字符串數組">
    	<array>
        	<value>String</value>
            <value>String</value>
            <value>String</value>
        </array>
    </property>	
</bean>
<bean id = " " class = " ">
	<property name = " 一個list">
    	<list>
        	<value>String</value>
            <value>String</value>
            <value>String</value>
        </list>
    </property>	
</bean>
<bean id = " " class = " ">
	<property name = " 一個set">
    	<set>
        	<value>String</value>
            <value>String</value>
            <value>String</value>
        </set>
    </property>	
</bean>
<bean id = " " class = " ">
	<property name = " 一個set">
    	<map>
        	<entry key = " " value = " "></value>
            <entry key = " ">
            	<value>String</value>
            </entry>
        </map>
    </property>	
</bean>
<bean id = " " class = " ">
	<property name = " 一個set">
    	<props>
        	<prop key = " ">String</prop>
        </props>
    </property>	
</bean>
複製代碼

用於給List結構集合注入的標籤

list array set

用於給Map結構集合注入的標籤

map props

結構相同,標籤能夠互換

基於註解的IOC配置

1.用於建立對象的註解

​ 與xml配置文件中編寫一個bean標籤實現的功能是同樣的

2.用於注入數據的註解

​ 與xml配置文件中編寫一個property標籤實現的功能是同樣的

3.用於改變做用範圍的註解

​ 在bean標籤中使用scope屬性實現的功能是同樣的

4.和生命週期想換的註解

​ 在bean標籤中使用init-methoddestory-method屬性實現的功能是同樣的

@Component [kəmˈpəʊnənt]組成部分;成分;部件

用於建立對象的

做用:用於把當前類對象存入spring容器中

屬性:

value: 用於指定bean的id.當咱們不寫時,他的默認值是當前類名,類名首字母小寫.

告知Spring在建立容器是要掃描的包,配置所須要的標籤不是在beans的約束中,而是在一個名稱爲context名稱空間和約束中

<context:component-scan pase-package=" "></context:component-scan>
複製代碼

Aopjar包xml配置

<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd ">
複製代碼

@Contorller@Service@Repository

@Contorller通常用於表現層

@Service通常用於業務層

@Repository通常用於持久層

做用和屬性和component同樣

@Autowried

用於注入數據

做用:自動按照類型注入,只要容器中有惟一的bean對象類型和要注入的變量類型匹配

若是沒有任何bean類型匹配則報錯

多個類型匹配時找到類型相同的集合再匹配變量名

出現位置:能夠出如今變量上和方法上

在使用註解注入時,set方法就不是必須的了

@Qualifier

做用:在按照類中注入的基礎之上再按照名稱注入,再給類成員注入時不能單獨使用,在給方法參數注入式能夠

@Resource

做用:直接按照bean的id注入.他能夠獨立使用

屬性:name:用於指定bean的id

都只能注入其餘bean類型的數據,而基本類型和Stirng類型沒法使用上述註解實現

@value

做用:用於注入基本類型和String類型的數據

屬性:

value:用於指定數據的值,它可使用spring中Spel

SpEl的寫法:${表達式};

@Scope

做用:用於指定bean的範圍

屬性:singleton,prototype;

@PreDestroy@PostConstruct

做用:用於指定初始化方法

相關文章
相關標籤/搜索