前言
不是開發出身,現在的事情也雜,做過個項目對Spring就是照着用,沒有系統瞭解過。
最近在看框架方面的內容,就順便看看了Spring。
看了一天,對Spring是什麼?IoC、依賴注入基本搞明白了。AOP應用場景懂了,原理沒懂。
硬着頭皮總結下吧,纔對得起這一天的查閱。
1、產生的背景
2003年,一位大神不滿EJB開發的臃腫,認爲經過設計,利用javaBean的方式也一樣達到企業開發的效果。於是編寫了個開源的框架。其中的一個模塊SpringMVC更完美的實現了web開發中的3層架構,影響深遠。
現在2020年,17年前思想仍然影響着現在搬磚的小弟,大師真是革命性的人物。同時,Spring也不停在進化着,如SpringBoot,SpringCloud等。
2、好處
理解真真的不深刻,照搬。
- 低侵入式設計,代碼污染極低
- 獨立於各種應用服務器,基於Spring框架的應用,可以真正實現Write Once,Run Anywhere的承諾
- Spring的DI機制降低了業務對象替換的複雜性,提高了組件之間的解耦
- Spring的AOP支持允許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用
- Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問
- Spring並不強制應用完全依賴於Spring,開發者可自由選用Spring框架的部分或全部
3、spring構成
核心容器
核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表達式語言,Spring Expression Language)等模塊組成,它們的細節如下:
spring-core模塊提供了框架的基本組成部分,包括 IoC 和依賴注入功能。
spring-beans 模塊提供 BeanFactory,工廠模式的微妙實現,它移除了編碼式單例的需要,並且可以把配置和依賴從實際編碼邏輯中解耦。
context模塊建立在由core和 beans 模塊的基礎上建立起來的,它以一種類似於JNDI註冊的方式訪問對象。Context模塊繼承自Bean模塊,並且添加了國際化(比如,使用資源束)、事件傳播、資源加載和透明地創建上下文(比如,通過Servelet容器)等功能。Context模塊也支持Java EE的功能,比如EJB、JMX和遠程調用等。ApplicationContext接口是Context模塊的焦點。spring-context-support提供了對第三方庫集成到Spring上下文的支持,比如緩存(EhCache, Guava, JCache)、郵件(JavaMail)、調度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
spring-expression模塊提供了強大的表達式語言,用於在運行時查詢和操作對象圖。它是JSP2.1規範中定義的統一表達式語言的擴展,支持set和get屬性值、屬性賦值、方法調用、訪問數組集合及索引的內容、邏輯算術運算、命名變量、通過名字從Spring IoC容器檢索對象,還支持列表的投影、選擇以及聚合等。
數據訪問/集成
數據訪問/集成層包括 JDBC,ORM,OXM,JMS 和事務處理模塊
Web
Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成
4、spring使用
4.1用idea創建spring項目
- idea創建maven項目
- 使用archetype,選擇【】
- 在pom文件,添加依賴了的spring包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
</dependencies>
- 自動重新import
- 添加ApplicationContext.xml文件,注意要設定資源根目錄
<bean id="student" class="master.com.Student" scope="prototype">
<property name="name"><value>setter學生的名字</value></property>
<property name="age"><value>20</value></property>
<property name="mainTeacher"><ref bean="teacher"></ref></property>
</bean>
<bean id="teacher" class="master.com.Teacher" scope="prototype">
<property name="name"><value>setter老師的名字</value></property>
<property name="education"><value>IT</value></property>
</bean>
- 會自帶helloword,試運行
//以前的寫法
helloWorld hw=new helloWorld();
hw.setName("常規方法");
System.out.println(hw);
System.out.println("======================");
//spring
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
helloWorld a=(helloWorld)applicationContext.getBean("a");
System.out.println(a);
System.out.println("======================");
可參考:https://blog.csdn.net/weixin_43373239/article/details/89578536
4.2 結合原來項目的理解
現在才明白了ApplicationContext的作用
還有配在裏邊的bean
當時真是懵懂照着配
總的來說,對Spring這個名詞沒有因未知而恐懼了,準備繼續用1周的時間再多瞭解些。路漫漫兮,都得懂點啊。