javascript
Spring IOC详解与配置
Spring:
框架:
具有一定功能的半成品軟件,基于框架會節省開發成本
框架作用:
提高開發效率、復用性、編寫規范、節約維護成本、解耦底層實現原理
Spring:
- Spring是分層的JavaSE/EE應用full-stack輕量級開源框架
- Spring主要是做整合,可以理解是一搜航空母艦,上面放置了很多的戰斗機
- Spring核心是IOC(控制反轉) 和 AOP(面向切面編程)
- Spring提供了對各種優秀框架的支持和 整合
Spring優點:
- 可以將對象間的依賴關系交由spring管理
- 避免硬編碼造成的程序間過渡耦合
- 可以使用切面編程思想對方法進行增強
- 可以通過配置或者注解的方式管理事務
- 不需要硬編碼管理事務
- 可以通過注解方便的測試Spring程序
- 其內部提供了對各種優秀框架的直接支持
- Spring對很多難用的API做了簡單的封裝
- Spring的源碼設計精妙、結構清晰值得學習
不使用Spring會有什么影響:
會造成(常見的):
Spring體系結構:
Data Access/Integration
- JDBC: 對各大數據庫廠商進行抽象處理
- ORM: 集成orm框架支持對象關系映射處理
- OXM: 提供了對 Object/XML映射實現的抽象層
- JMS: 主要包含了一些制造和消費消息的特性
- Transactions: 支持編程和聲明式事務管理
Web
- Websocket: 提供了WebSocket和SocketJS的實現
- Servlet: 利用MVC(model-view-controller)的實現分離代碼
- Web: 提供了基礎的面向 Web 的集成特性(如: 文件上傳)
- Portlet: 提供了Portlet環境下的MVC實現
中間層
- AOP: 提供了符合AOP要求的面向切面的編程實現
- Aspects: 提供了與AspectJ的集成功能
- Instrumentation: 提供了類植入(Instrumentation)的支持和類加載器的實現
- Messaging: 用于構建基于消息的應用程序
Core Container
- Beans: Bean工廠與bean的裝配
- Core: 依賴注入IoC與DI的最基本實現
- Content: IOC容器的企業服務擴展
- SpEl: 用于在運行時查詢和操縱對象的表達式
Test
- 支持使用 JUnit 和 TestNG 對 Spring 組件進行測試
耦合&內聚:
耦合(Coupling)
代碼書寫過程中所使用技術的結合緊密度,用于衡量軟件中各個模塊之間的互聯程度
內聚(Cohesion)
代碼書寫過程中單個模塊內部各組成部分間的聯系,用于衡量軟件中各個模塊內部的功能聯系
程序書寫的目標:高內聚、低耦合,就是同一個模塊內的各個元素之間要高度緊密,但是各個模塊之間的相互依存度不要那么緊密
配置文件耦合不是java類耦合,解決耦合問題
IOC容器:
- IoC(Inversion Of Control)控制反轉,Spring反向控制應用程序所需要使用的外部資源,轉交給第三方(工廠)完成
- Spring控制的資源全部放置在Spring容器中,該容器稱為IoC容器
- Ioc就是從自己new對象,變成spring給你對象,都放在ioc容器里
IOC的作用:
- 解決代碼耦合度過高問題
- 解決對象個數問題
- 解決依賴關系問題
- 解決創建順序問題
入門案例:
IoC配置(XML格式)
bean
- 名稱:bean
- 類型:標簽
- 歸屬:beans標簽
- 作用:定義spring中的資源,受此標簽定義的資源將受到spring控制
| id | 對象的引用名稱;一定要唯一; 一次只能定義一個引用名稱,通過id值獲取bean |
| name | 對象的引用名稱; 與id區別是:name一次可以定義多個引用名稱。 |
| class | bean的類型,類的全限定名稱 |
| init-method | 指定類中初始化方法的名稱,在構造方法執行完畢后立即執行 |
| destroy-method | 指定類中銷毀方法名稱,在銷毀spring容器前執行 |
| lazy-init | 設置為true表示在第一次使用對象的時候才創建,只對單例對象有效。 |
| scope | 設置bean的作用范圍, 取值: singleton:單例, 默認值; prototype:多例 request:web項目中,將對象存入request域中 session:web項目中,將對象存入session域中 globalsession:web項目中,將對象應用于集群環境,沒有集群相當于session |
格式:
<beans><bean /> </beans>基本屬性:
<!-- id:bean的名稱,通過id值獲取beanclass:bean的類型name:bean的名稱,可以通過name值獲取bean,用于多人配合時給bean起別名,可以定義多個,用逗號隔開,測試類寫哪個都可以獲取 --><bean id="userService" name="userService2,userService3" class="com.itzhuzhu.service.impl.UserServiceImpl"/>- BeanFactory是Spring容器的頂層接口, 采用 延遲創建 對象的思想
- ApplicationContext是BeanFactory的子接口, 采用 即時創建 對象的思想
bean屬性scope
-
名稱:scope
-
類型:屬性
-
歸屬:bean標簽
-
作用:定義bean的作用范圍
-
格式:
取值:
- singleton(默認配置):設定創建出的對象保存在spring容器中,是一個單例的對象,地址值都一樣的,加載spring容器的時候就會初始化
- prototype:設定創建出的對象保存在spring容器中,是一個非單例的對象,加載容器不初始化,獲取的對象時候創建,用一個創建一個
- request、session、application、 websocket :設定創建出的對象放置在web容器對應的位置
bean生命周期
-
名稱:init-method,destroy-method
-
類型:屬性
-
歸屬:bean標簽
-
作用:定義bean對象在初始化或銷毀時完成的工作
-
格式:
取值:bean對應的類中對應的具體方法名
注意事項:
-
當scope=“singleton”時,spring容器中有且僅有一個對象,init方法在創建容器時僅執行一次
-
當scope=“prototype”時,spring容器要創建同一類型的多個對象,init方法在每個對象創建時均執行一次
-
當scope=“singleton”時,關閉容器會導致bean實例的銷毀,調用destroy方法一次
-
當scope=“prototype”時,對象的銷毀由垃圾回收機制gc()控制,destroy方法將不會被執行
bean對象創建方式
factory-bean
如果項目之前沒有使用Spring會用到這種方式
-
名稱:factory-bean
-
類型:屬性
-
歸屬:bean標簽
-
作用:定義bean對象創建方式,使用靜態工廠的形式創建bean,兼容早期遺留系統的升級工作
-
格式:
取值:工廠bean中用于獲取對象的靜態方法名
注意事項:
- class屬性必須配置成靜態工廠的類名
factory-bean,factory-method
-
名稱:factory-bean,factory-method
-
類型:屬性
-
歸屬:bean標簽
-
作用:定義bean對象創建方式,使用實例工廠的形式創建bean,兼容早期遺留系統的升級工作
-
格式:
取值:工廠bean中用于獲取對象的實例方法名
注意事項:
-
使用實例工廠創建bean首先需要將實例工廠配置bean,交由spring進行管理
-
factory-bean是實例工廠的beanId
總結
以上是生活随笔為你收集整理的Spring IOC详解与配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#语言规范所在文件夹,C#规范整理·语
- 下一篇: h标签对html网页的作用,网页H标签S