spring概念和ioc入門(ioc操作xml配置文件)
Spring相關概念
什么是Spring?
Spring是一個開源框架,是一個輕量級(不依賴于其他的東西)的框架
Spring的核心主要由ioc、aop組成
ioc:控制反轉,比如有一個類,在類里面有方法(不是靜態方法),調用類里面的方法,使用對象調用方法
創建類的對象的過程,需要new出來對象
把對象的創建不是通過new的方式來實現,而是交給Spring配置創建類對象
aop:面向切面編程,擴展一個功能,不是通過修改源代碼完成
spring是一個一站式的框架
一站式框架:
Spring在java EE的三層結構中,每一層都提供了不同的解決方法
web層:
Spring MVC
service層:
Spring的ioc
dao層:
Spring的jdbcTemplate
Spring的版本:
4.x,老的項目可能會用Spring3.x
Spring里ioc的操作:
1、把對象的創建直接交給Spring直接管理
2、ioc的操作主要有兩部分:
1、ioc的配置文件方式
2、ioc的注解方式
ioc的底層原理:
1、ioc的底層原理使用的技術:
1、xml配置文件
2、dom4j解決xml
3、工廠設計模式
4、反射
開發的思想:高內聚,低耦合
ioc的入門案例
第一步,導入jar包
解壓zip文件,每個功能上都有三個jar包
基本jar包
文檔jar包
源代碼jar包
做Spring最基本的功能的時候,只需要導入四個核心的jar包即可
Spring的核心只包含beans、core、context、spel這四個jar包
導入一些支持日志輸出的jar包
log4j.jar
commons-logging
第二步,創建類,在類里面創建方法
第三步,創建Spring配置文件,配置創建類
Spring的核心配置文件的名稱和位置不是固定的
建議放到src下面,名稱寫什么都可以
官方建議applicationContext.xml
引入schema約束
配置對象創建
第四步,寫代碼測試對象創建
測試代碼
配置文件沒有提示的問題
1、Spring引入schema約束,把約束文件引入到eclipse中
復制約束的路徑
http://www.springframework.org/schema/beans/spring-beans.xsd
在window的performance里面搜索"xml "找xml catalog添加上本地的約束
2、在有網的地方把這些代碼寫一遍,然后就會產生緩存,在無網的地方也會產生提示
Spring的bean管理(基于xml配置文件)
bean實例化的操作:
創建對象
bean實例化的方式:
1、在Spring里面通過配置文件創建對象
2、bean實例化三種實現方式
1、使用類里的無參構造創建(重點)
如果在里面寫了有參構造,那么就沒有默認的無參構造,那么實例將不會被創建出來,就會出現異常
2、使用靜態工廠創建
創建一個靜態的方法,返回類的對象,那么這個方法稱為靜態工廠
3、使用實例工廠創建
創建不是靜態的方法,返回類的對象,用類的對象進行創建
bean標簽的使用、常用的屬性:
1、id屬性:
id表示給對象取的名字,可以通過id直接訪問,任意命名,沒有要求
id的屬性值不能為中文,不能包含下劃線等特殊符號
根據id值得到配置的對象
2、class屬性:
創建對象所在類的全路徑
3、name屬性:
name和id功能一致,都能得到配置的對象
id的屬性值里面不能包含特殊符號
但是name屬性值里面可以包含特殊符號
4、scope屬性:
Bean的作用范圍
singleton:默認值,單例的(重要)
測試創建多個對象的代碼測試的時候打印出來的地址相同
prototype:多例的(重要)
測試創建多個對象的代碼測試的時候打印出來的地址不相同
多實例的應用場景:
配置action要用多實例
(了解):
request:web項目中,Spring創建一個Bean對象,并將對象存入request域中
session:web項目中,Spring創建一個Bean對象,并將對象存入session域中
globalsession:web項目中,應用在Porlet環境,如果沒有Porlet環境那么globalsession相當于session
全局的session,登錄一次,其他的業務里面可以直接用,單點登錄
屬性的注入:
在創建對象的時候,也可以向類里面的屬性設置值
屬性注入的方式:
有參構造
setXXX()
接口方式注入
創建一個接口,定義上參數
實現接口,實現接口中的方法,在重新方法的時候注入
在Spring框架里面,只支持前兩種方式
setXXX()
實際開發中用的最多的方式
有參構造
不支持接口方式注入
在Spring里面的注入方式:
有參數的構造注入的標簽:constructor-arg:
屬性:name:
有參構造的屬性
value:
屬性值
使用setXXX()方式注入:
property:注入屬性值
name:
類里面定義的屬性名稱
value:
設置的具體的值
注入對象類型的屬性:
創建一個service類和dao類
在service里得到一個dao的對象
1、在service里面把dao作為類型屬性
2、生成dao類型屬性的setXXX()
3、在配置文件中完成注入的關系
P名稱空間的注入:
名稱空間:
標簽中的屬性,一個標簽中不能有多個相同的名稱屬性,但是用名稱空間可以完成多個屬性操作
xmlns:p="http://www.springframework.org/schema/p":P名稱空間
在bean標簽中加入p:屬性名="屬性值"即可完成注入
Spring注入復雜數據:
注入數組的類型
注入List集合
注入Map集合
注入properties類型
ioc和Di的區別:
ioc:控制反轉,將對象的創建交給Spring管理
di:依賴注入,在創建對象過程中,可以向類里面的屬性中設置值
關系:依賴注入不能單獨存在,需要在ioc的基礎上完成
每次訪問ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");配置文件都會加載一次
Spring整合web項目的原理:
new ClassPathXmlApplicationContext("bean1.xml") 功能可以實現,效率低
解決方案:(實現思想)
加載配置文件和創建對象過程,在服務器啟動的時候完成
實現原理:
servlet階段,servletContext對象
用監聽器監聽servletContext對象什么時候創建
具體使用:
服務器啟動的時候會為每個項目創建一個servletContext對象
在servletContext對象創建的時候使用監聽器可以監聽到servletContext對象在什么時候創建
使用監聽器監聽到servletContext對象創建的時候,加載Spring的配置文件,把配置文件配置對象創建
把創建出來的對象放到servletContext域對象里面(用setAttribute放值)
獲取對象的時候,到servletContext域里面得到(getAttribute方法取得)
創建類實現ServletContextListener接口,將代碼放到init方法中
Spring入門知識2
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- Spring Boot簡介:在Spring框架的基礎上發展來的,開發項目代碼少,比SSH、SSM簡潔應用場景:互聯...
- See more: Spring WebSocket reference整個例子屬于WiseMenuFrameWo...
- Spring Boot的啟動方式:1、在IDEA里面直接啟動2、進入項目的目錄下,輸入mvn spring-boo...