文章已託管到GitHub,你們能夠去GitHub查看閱讀,歡迎老闆們前來Star! 搜索關注微信公衆號 碼出Offer 領取各類學習資料!java
- 傳統Web開發存在硬編碼所形成的過分程序耦合(例如:Service中做爲屬性Dao對象)
- 部分Java EE API較爲複雜,使用效率低(例如:JDBC開發步驟)
- 侵入性強,移植性差(例如:DAO實現的更換,從Connection到SqlSession)
- Spring 是一個開源的設計層面框架,它解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用
- Spring是衆多優秀設計模式的組合(工廠、單例、代理、適配器、包裝器、觀察者、模板、策略)
- Spring並未替代現有框架產品,而是將衆多框架進行有機整合,簡化企業級開發,俗稱"膠水框架"
官方網站:spring.io/git
GitHub:github.com/spring-proj…github
下載地址:repo.spring.io/release/org…web
Spring架構由諸多模塊組成,可分類爲spring
- 核心技術:依賴注入 ,事件,資源,i18n,驗證,數據綁定,類型轉換,SpEL,AOP
- 測試:模擬對象,TestContext框架,Spring MVC測試,WebTestClient。
- 數據訪問:事務 ,DAO支持,JDBC,ORM,封裝XML。
- Spring MVC和 Spring WebFlux Web框架。
- 集成:遠程處理,JMS,JCA,JMX,電子郵件,任務,調度,緩存。
- 語言:Kotlin,Groovy,動態語言。
Spring特色 |
---|
![]() |
Spring架構 |
![]() |
GroupId | ArtifactId | 說明 |
---|---|---|
org.springframework | spring-beans | Beans 支持,包含 Groovy |
org.springframework | spring-aop | 基於代理的AOP支持 |
org.springframework | spring-aspects | 基於AspectJ 的切面 |
org.springframework | spring-context | 應用上下文運行時,包括調度和遠程抽象 |
org.springframework | spring-context-support | 支持將常見的第三方類庫集成到 Spring 應用上下文 |
org.springframework | spring-core | 其餘模塊所依賴的核心模塊 |
org.springframework | spring-expression | Spring 表達式語言,SpEL |
org.springframework | spring-instrument | JVM 引導的儀表(監測器)代理 |
org.springframework | spring-instrument-tomcat | Tomcat 的儀表(監測器)代理 |
org.springframework | spring-jdbc | 支持包括數據源設置和 JDBC 訪問支持 |
org.springframework | spring-jms | 支持包括髮送/接收JMS消息的助手類 |
org.springframework | spring-messaging | 對消息架構和協議的支持 |
org.springframework | spring-orm | 對象/關係映射,包括對 JPA 和 Hibernate 的支持 |
org.springframework | spring-oxm | 對象/XML 映射(Object/XML Mapping,OXM) |
org.springframework | spring-test | 單元測試和集成測試支持組件 |
org.springframework | spring-tx | 事務基礎組件,包括對 DAO 的支持及 JCA 的集成 |
org.springframework | spring-web | web支持包,包括客戶端及web遠程調用 |
org.springframework | spring-webmvc | REST web 服務及 web 應用的 MVC 實現 |
org.springframework | spring-webmvc-portlet | 用於 Portlet 環境的MVC實現 |
org.springframework | spring-websocket | WebSocket 和 SockJS 實現,包括對 STOMP 的支持 |
org.springframework | spring-jcl | Jakarta Commons Logging 日誌系統 |
編寫一個讀取Spring配置文件並建立對象的工廠,瞭解Spring工廠建立對象的流程,以便使用自定義工廠來測試Spring基本開發流程express
package com.mylifes1110.factory;
import java.io.IOException;
import java.util.Properties;
/** * @ClassName MyFactory * @Description 自定義工廠(建立對象) * @Author Ziph * @Date 2020/7/12 * @Since 1.8 * @Version 1.0 */
public class MyFactory {
private Properties properties = new Properties();
public MyFactory() {
}
public MyFactory(String config) throws IOException {
// 加載配置文件
properties.load(MyFactory.class.getResourceAsStream(config));
}
// 獲取對象
public Object getBean(String beanName) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
String classPath = properties.getProperty(beanName);
if (classPath != null) {
Class clazz = null;
clazz = Class.forName(classPath);
return clazz.newInstance();
}
return null;
}
}
複製代碼
若是對Maven不瞭解的小夥伴能夠參考Maven教程編程
File -> NewProject |
---|
![]() |
建立Maven項目 |
![]() |
在pom.xml文件中引入Spring經常使用依賴設計模式
<dependencies>
<!-- Spring經常使用依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
</dependencies>
複製代碼
在resources文件夾中建立一個名爲
spring-context.xml
,命名並沒有規定,還有其餘的經常使用命名,好比:applicationContext.xml
、beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
複製代碼
定義一個Bean對象、生產該對象並測試該對象內的方法(UserDaoImpl)tomcat
package com.mylifes1110.dao.impl;
import com.mylifes1110.bean.User;
import com.mylifes1110.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public int insertUser(User user) {
System.out.println("------insertUser and UserDao------");
return 0;
}
}
複製代碼
依賴注入在這裏能夠把它理解爲將要生產的對象注入到Spring容器中,也就是在spring-context.xml文件利用標籤注入,這樣就可讓Spring知道你要生產的對象是誰
標籤: <bean id="惟一標籤" class="須要被建立的目標對象全限定名"/>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="UserDao" class="com.mylifes1110.dao.impl.UserDaoImpl"/>
</beans>
複製代碼
調用Spring工廠API接口ApplicationContext讀取配置Spring核心配置文件並建立工廠對象
package com.mylifes1110.dao;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserDaoImplTest {
/** * @MethodName insertUser * @Param [] * @Description 測試使用Spring工廠獲取對象 * @Author Ziph * @Date 2020/7/12 */
@Test
public void insertUser() {
// 讀取配置文件所需建立對象中所需建立的bean對象並獲取spring工廠對象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
// 經過注入時的惟一標識(id)獲取bean對象
UserDao userDao = (UserDao) context.getBean("UserDao");
// 使用對象
userDao.insertUser(null); // 輸出結果爲:------insertUser and UserDao------
}
}
複製代碼
Spring框架包含多個模塊,每一個模塊各司其職,可結合需求引入相關依賴Jar包實現功能。
注意: Jar包彼此存在依賴,只需引入最外層Jar便可由Maven自動將相關依賴Jar引入到項目中。
Spring經常使用功能的Jar包依賴關係 |
---|
![]() |
配置文件中的頂級標籤中包含了語義化標籤的相關信息(spring-context.xml頭文件便是schema)
注意: Spring須要導入的schema標籤是頗有規律的,由於Spring是特別規範的。例如:以下context別名的schema標籤是我本身複製修改的,它也是咱們所用到Spring的schema,你能夠複製beans的schema來替換全部beans的關鍵字便可,可是記得複製全(注意查看三個有context標誌標籤語句,另外「 : 」後面的是別名哦)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-context.xsd">
</beans>
複製代碼
schema名稱 | 描述 |
---|---|
xmlns | 語義化標籤所在的命名空間 |
xmlns:xsi | XMLSchema-instance 標籤遵循Schema標籤標準 |
xsi:schemaLocation | xsd文件位置,用以描述標籤語義、屬性、取值範圍等 |