首頁 > 軟體

Spring框架核心概念小結

2022-02-09 19:01:09

1、Spring是什麼?

簡而言之,Spring是企業級Java的開源開發框架。Spring框架的核心功能可用於開發任何java應用程式。Spring框架的核心模組如下:

  • Spring Context(Spring上下文):用於依賴注入(DI);
  • Spring DAO(資料庫存取物件): 使用DAP模式進行資料庫操作;
  •  Spring JDBC: 用於JDBC和資料來源的支援 ;
  • Spring ORM: 用於ORM工具支援,如Hibernate;
  • Spring AOP: 用於面向方面的程式設計;
  • Spring Web module: 用於建立Web應用。

2、Spring框架的優點是什麼

  • 輕量級:Spring時輕量級應用框架。 Spring框架的基本版本在2MB左右;
  • 依賴注入/控制反轉 (DI/IoC):這有助於通過連線獨立的元件/物件來實現鬆散耦合;
  • Spring容器:包含和管理應用程式物件的生命週期;
  • 事務管理:Spring支援事務管理,即JDBC操作、檔案上傳、例外處理等,通過spring註解或bean設定來完成;
  • Spring MVC:Spring MVC 可用於建立 Web 應用程式以及能夠返回 XML 或 JSON 響應的restful Web 服務;
  • 例外處理:Spring 提供了一個方便的 API 來將特定的技術異常(由 JDBC、Hibernate 等丟擲)轉換為一致的未經檢查的異常;
  • 面向切面程式設計(AOP):AOP 將程式邏輯分解為不同的部分(稱為關注點)。它用於通過橫切關注點來增加模組化。橫切關注點是可以影響整個應用程式的關注點,應儘可能集中在程式碼中的一個位置,例如事務管理、身份驗證、紀錄檔記錄、安全性等。

3、什麼是Spring Bean?

任何由 Spring IoC 容器初始化的普通 Java 類都稱為 Spring Bean。我們使用 spring 應用程式上下文來獲取 Spring Bean 範例。 Spring IoC Container 管理 Spring Bean 範圍/作用域的生命週期並在 bean 中注入任何所需的依賴項。

Spring bean的不同作用域:

當我們宣告 時,我們可以指定 bean 的作用域來通知 IoC 容器關於 bean 的建立以及它將存活多長時間。

對於任何 Java 應用程式,都有兩個不同的作用域,稱為單例(Singleton)和原型(Prototype)

主要有三種不同的作用域(或範圍),即請求(request)、對談(session)和全域性對談(global-session),專門針對基於 Spring 的 Java Web 應用程式。

Singleton 是任何 bean 的預設作用域。這意味著每個 IoC 容器將建立單個 bean 範例。因此,單例 bean 不是執行緒安全的。

  • 在原型範圍內,每次請求 bean 時都會建立一個新範例。
  • 在請求範圍內,單個 bean 被定義到一個 HTTP 請求內。此範圍僅在支援 Web 的 spring ApplicationContext 中有效。
  • 在對談範圍內,單個 bean 被定義到一個 HTTP 對談內。此範圍僅在支援 Web 的 spring ApplicationContext 中有效。
  • 在 global-session 範圍內,bean 被定義為全域性 HTTP 對談內有效。此範圍僅在支援 Web 的 spring ApplicationContext 中有效。

要設定 spring bean 的範圍,我們可以在 標籤中使用scope屬性。 @scope 用於基於註釋的 DI。

4、Spring IoC 容器

Spring 容器是 Spring 框架的核心。容器將建立物件,把它們連線在一起,設定它們,並管理它們從建立到銷燬的完整生命週期。 Spring 容器使用依賴注入 (DI) 來管理組成應用程式的元件。

有兩種不同型別的容器:

BeanFactory 容器:這是 Spring 容器的核心。

org.springframework.beans.factory.BeanFactory 是一個介面,充當 IoC 容器,它範例化、設定和管理許多 bean。應用範例如下:

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-3.0.xsd">
<bean id="helloWorld" class="com.newday.bean.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
package com.newday.bean;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
MainApp.java:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import com.newday.bean.HelloWorld;
public class MainApp {
public static void main(String args[]) {
Resource resource = new ClassPathResource("beans.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
HelloWorld helloWorld = (HelloWorld) beanFactory.getBean("helloWorld");
System.out.println(helloWorld.getMessage());
}
}

ApplicationContext 容器:

org.springframework.context.ApplicationContext 介面也充當 IoC 容器,但 ApplicationContext 介面建立在 BeanFactory 介面之上,以提供一些BeanFactory 額外的功能,例如與 Spring 的 AOP 的簡單整合、訊息資源處理(對於 I18N )、事件傳播、Web 應用程式的應用層特定上下文(例如 WebApplicationContext)。所以使用 ApplicationContext 比使用 BeanFactory更好些。範例程式碼如下:

<?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-3.0.xsd">
<bean id="helloWorld" class="com.newday.bean.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
package com.newday.bean;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.newday.applicationcontext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.newday.bean.HelloWorld;
public class MainApp {
public static void main(String args[]) {
ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld helloWorld = (HelloWorld) appContext.getBean("helloWorld");
System.out.println(helloWorld.getMessage());
}
}

5、@Autowired

對於基於註解的依賴注入,使用@Autowired 註解。標有@Component/@Service/@Repository 等的類可以注入到標有@Autowired 的屬性中

@Autowired 應用於:

  • 欄位域:用於基於欄位的依賴注入;
  • setter:用於setter依賴注入 。與基於欄位的依賴注入相同;
  • 構造器:基於建構函式的依賴注入。

1)基於構造器和setter的區別

  • 依賴項的注入可以是可選的,也可以是強制性的。對於強制注入,我們使用基於建構函式的 DI。對於可選的依賴項,我們可以使用基於 setter 的 DI。但是,我們可以使用 @Required 註釋標記基於 setter 的 DI。
  • 在迴圈依賴的情況下,基於構造器的 DI 將無法注入,但基於 setter 的 DI 將能夠注入
  • 如果要注入更多數量的引數,則建議使用基於建構函式的 DI。

2)context:annotation-config 和 context:component-scan 的區別

  • context:annotation-config 用於啟用已在應用程式上下文中註冊的 bean 中的註釋;
  • context:component-scan 也可以執行 context:annotation-config 所做的工作,但也可以掃描包以在應用程式上下文中查詢和註冊 bean。

3)@Component、@Controller、@Repository & @Service 註解的區別

如果一個類用@Component/@Controller/@Service/@Repository 註解標記,那麼Spring DI 容器可以在元件掃描機制期間識別該類。但是,對於服務層類使用@Service 是個好主意,並且@Controller 應該在spring mvc web 控制器中使用。 @Repository 用於將 DAO 匯入 DI 容器。此外,任何未經檢查的異常都將被轉換為 Spring DataAccessException。

4)ViewResolver 與 MultipartResolver

ViewResolver 用於按名稱解析檢視。該介面由

InternalResourceViewResolver 實現 ;

MultipartResolver 用於處理 web 應用程式中的檔案上傳。

5)Spring MVC 中的驗證

org.springframework.validation.Validator 介面支援 spring MVC 驗證。驗證表單的一些實用方法是 ValidationUtils 類中的 rejectIfEmptyOrWhitespace() 和 rejectIfEmpty()。範例如下:

@Component
public class EmployeeValidator implements Validator{
public boolean supports(Class clazz) {
return EmployeeVO.class.isAssignableFrom(clazz);
}

public void validate(Object target, Errors errors){
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "error.firstName", "First name is required.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "error.lastName", "Last name is required.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "error.email", "Email is required.");
}
}

Spring MVC 中驗證表單的另一種方法是:

對模型 bean 的屬性使用Hibernate驗證(例如 @NotNull、@Size 等)

在控制器的方法簽名中使用@Valid、BindingResult。

BindingResult.hasErrors() 方法來驗證模型 bean。

6、Spring MVC 攔截器

HandlerInterceptor 介面充當 spring MVC 攔截器。它在服務請求之前和之後攔截。如果您實現了 HandlerInterceptor 介面,則 preHandle()、postHandle() 和 afterCompletion() 是要覆蓋的方法。但是,為了避免覆蓋,您可以使用 HandlerInterceptorAdapter 類。

7、Spring MVC 框架中的例外處理

Spring 中的異常是使用

SimpleMappingExceptionResolver 類以宣告方式處理的。您要處理的異常列表是針對 exceptionMapping 屬性設定的。如果有異常發生在流程中的任何地方,都將被捕獲並顯示相應的檢視。對於所有其他異常,您可以針對 defaultErrorView 屬性捕獲它們。範例設定如下:

快速切入:Spring框架核心概念總覽
原創2021-12-31 12:08·牛旦視界
編者按:
這篇內容將幫助你總體認識有關Spring框架相關的核心知識。我儘量在這裡涵蓋 Spring 框架的一些非常重要的概念。希望這可幫助你更好的總體把握Spring框架,促使你積極探索Spring的有趣的技術棧生態世界。

Spring框架
1、Spring是什麼?
簡而言之,Spring是企業級Java的開源開發框架。Spring框架的核心功能可用於開發任何java應用程式。Spring框架的核心模組如下:
ü Spring Context(Spring上下文):用於依賴注入(DI);
ü Spring DAO(資料庫存取物件): 使用DAP模式進行資料庫操作;
ü Spring JDBC: 用於JDBC和資料來源的支援 ;
ü Spring ORM: 用於ORM工具支援,如Hibernate;
ü Spring AOP: 用於面向方面的程式設計;
ü Spring Web module: 用於建立Web應用。
2、Spring框架的優點是什麼
ü 輕量級:Spring時輕量級應用框架。 Spring框架的基本版本在2MB左右;
ü 依賴注入/控制反轉 (DI/IoC):這有助於通過連線獨立的元件/物件來實現鬆散耦合;
ü Spring容器:包含和管理應用程式物件的生命週期;
ü 事務管理:Spring支援事務管理,即JDBC操作、檔案上傳、例外處理等,通過spring註解或bean設定來完成;
ü Spring MVC:Spring MVC 可用於建立 Web 應用程式以及能夠返回 XML 或 JSON 響應的restful Web 服務;
ü 例外處理:Spring 提供了一個方便的 API 來將特定的技術異常(由 JDBC、Hibernate 等丟擲)轉換為一致的未經檢查的異常;
ü 面向切面程式設計(AOP):AOP 將程式邏輯分解為不同的部分(稱為關注點)。它用於通過橫切關注點來增加模組化。橫切關注點是可以影響整個應用程式的關注點,應儘可能集中在程式碼中的一個位置,例如事務管理、身份驗證、紀錄檔記錄、安全性等。
3、什麼是Spring Bean?
任何由 Spring IoC 容器初始化的普通 Java 類都稱為 Spring Bean。我們使用 spring 應用程式上下文來獲取 Spring Bean 範例。 Spring IoC Container 管理 Spring Bean 範圍/作用域的生命週期並在 bean 中注入任何所需的依賴項。
Spring bean的不同作用域:
當我們宣告 <bean> 時,我們可以指定 bean 的作用域來通知 IoC 容器關於 bean 的建立以及它將存活多長時間。
對於任何 Java 應用程式,都有兩個不同的作用域,稱為單例(Singleton)和原型(Prototype)
主要有三種不同的作用域(或範圍),即請求(request)、對談(session)和全域性對談(global-session),專門針對基於 Spring 的 Java Web 應用程式。
Singleton 是任何 bean 的預設作用域。這意味著每個 IoC 容器將建立單個 bean 範例。因此,單例 bean 不是執行緒安全的。
在原型範圍內,每次請求 bean 時都會建立一個新範例。
在請求範圍內,單個 bean 被定義到一個 HTTP 請求內。此範圍僅在支援 Web 的 spring ApplicationContext 中有效。
在對談範圍內,單個 bean 被定義到一個 HTTP 對談內。此範圍僅在支援 Web 的 spring ApplicationContext 中有效。
在 global-session 範圍內,bean 被定義為全域性 HTTP 對談內有效。此範圍僅在支援 Web 的 spring ApplicationContext 中有效。
要設定 spring bean 的範圍,我們可以在 <bean> 標籤中使用scope屬性。 @scope 用於基於註釋的 DI。
4、Spring IoC 容器
Spring 容器是 Spring 框架的核心。容器將建立物件,把它們連線在一起,設定它們,並管理它們從建立到銷燬的完整生命週期。 Spring 容器使用依賴注入 (DI) 來管理組成應用程式的元件。
有兩種不同型別的容器:
BeanFactory 容器:這是 Spring 容器的核心。 
org.springframework.beans.factory.BeanFactory 是一個介面,充當 IoC 容器,它範例化、設定和管理許多 bean。應用範例如下:
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-3.0.xsd">
<bean id="helloWorld" class="com.newday.bean.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
package com.newday.bean;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
MainApp.java:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import com.newday.bean.HelloWorld;
public class MainApp {
public static void main(String args[]) {
Resource resource = new ClassPathResource("beans.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
HelloWorld helloWorld = (HelloWorld) beanFactory.getBean("helloWorld");
System.out.println(helloWorld.getMessage());
ApplicationContext 容器:
org.springframework.context.ApplicationContext 介面也充當 IoC 容器,但 ApplicationContext 介面建立在 BeanFactory 介面之上,以提供一些BeanFactory 額外的功能,例如與 Spring 的 AOP 的簡單整合、訊息資源處理(對於 I18N )、事件傳播、Web 應用程式的應用層特定上下文(例如 WebApplicationContext)。所以使用 ApplicationContext 比使用 BeanFactory更好些。範例程式碼如下:
package com.newday.applicationcontext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld helloWorld = (HelloWorld) appContext.getBean("helloWorld");
5、@Autowired
對於基於註解的依賴注入,使用@Autowired 註解。標有@Component/@Service/@Repository 等的類可以注入到標有@Autowired 的屬性中
@Autowired 應用於:
ü 欄位域:用於基於欄位的依賴注入;
ü setter:用於setter依賴注入 。與基於欄位的依賴注入相同;
ü 構造器:基於建構函式的依賴注入。
1)基於構造器和setter的區別
ü 依賴項的注入可以是可選的,也可以是強制性的。對於強制注入,我們使用基於建構函式的 DI。對於可選的依賴項,我們可以使用基於 setter 的 DI。但是,我們可以使用 @Required 註釋標記基於 setter 的 DI。
ü 在迴圈依賴的情況下,基於構造器的 DI 將無法注入,但基於 setter 的 DI 將能夠注入
ü 如果要注入更多數量的引數,則建議使用基於建構函式的 DI。
2)context:annotation-config 和 context:component-scan 的區別
ü context:annotation-config 用於啟用已在應用程式上下文中註冊的 bean 中的註釋;
ü context:component-scan 也可以執行 context:annotation-config 所做的工作,但也可以掃描包以在應用程式上下文中查詢和註冊 bean。
3)@Component、@Controller、@Repository & @Service 註解的區別
如果一個類用@Component/@Controller/@Service/@Repository 註解標記,那麼Spring DI 容器可以在元件掃描機制期間識別該類。但是,對於服務層類使用@Service 是個好主意,並且@Controller 應該在spring mvc web 控制器中使用。 @Repository 用於將 DAO 匯入 DI 容器。此外,任何未經檢查的異常都將被轉換為 Spring DataAccessException。
4)ViewResolver 與 MultipartResolver
ViewResolver 用於按名稱解析檢視。該介面由 
InternalResourceViewResolver 實現 ;
MultipartResolver 用於處理 web 應用程式中的檔案上傳。
5)Spring MVC 中的驗證
org.springframework.validation.Validator 介面支援 spring MVC 驗證。驗證表單的一些實用方法是 ValidationUtils 類中的 rejectIfEmptyOrWhitespace() 和 rejectIfEmpty()。範例如下:
@Component
public class EmployeeValidator implements Validator{
public boolean supports(Class clazz) {
return EmployeeVO.class.isAssignableFrom(clazz);
public void validate(Object target, Errors errors){
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "error.firstName", "First name is required.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "error.lastName", "Last name is required.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "error.email", "Email is required.");
Spring MVC 中驗證表單的另一種方法是:
對模型 bean 的屬性使用Hibernate驗證(例如 @NotNull、@Size 等)
在控制器的方法簽名中使用@Valid、BindingResult。
BindingResult.hasErrors() 方法來驗證模型 bean。
6、Spring MVC 攔截器
HandlerInterceptor 介面充當 spring MVC 攔截器。它在服務請求之前和之後攔截。如果您實現了 HandlerInterceptor 介面,則 preHandle()、postHandle() 和 afterCompletion() 是要覆蓋的方法。但是,為了避免覆蓋,您可以使用 HandlerInterceptorAdapter 類。
7、Spring MVC 框架中的例外處理
Spring 中的異常是使用 
SimpleMappingExceptionResolver 類以宣告方式處理的。您要處理的異常列表是針對 exceptionMapping 屬性設定的。如果有異常發生在流程中的任何地方,都將被捕獲並顯示相應的檢視。對於所有其他異常,您可以針對 defaultErrorView 屬性捕獲它們。範例設定如下:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="com.newday.exception.XYZException">
error/xyzExceptionView
</prop>
</props>
</property>
<property name="defaultErrorView" value="error/genericExceptionView"/>

8、如何在 Spring Bean 中獲取 ServletContext 和 ServletConfig 物件?

實現 ServletContextAware 和 ServletConfigAware 介面並覆蓋以下方法:

@Controller
@RequestMapping(value = "/magic")
public class SimpleController implements ServletContextAware, ServletConfigAware {
private ServletContext context;
private ServletConfig config;
@Override
public void setServletConfig(final ServletConfig servletConfig) {
this.config = servletConfig;
}
@Override
public void setServletContext(final ServletContext servletContext) {
this.context = servletContext;
}
//other code
}

9、Spring中的事務管理

資料庫事務是一組被視為關聯工作單元的操作。事務的主要原則是提交所有操作或在失敗的情況下回滾所有操作。在交易中提交資料時,我們需要確保交易協定/稱為 ACID(原子性-一致性-隔離-永續性)的屬性:

  • 原子性(Atomicty):事務中的所有操作都被視為一個工作單元。因此,事務將被提交或回滾。
  • 一致性(Consistency):這通過維護資料庫的參照完整性來確保事務將資料庫從一個有效狀態帶到另一個有效狀態。
  • 隔離性(Isolation):每個事務都應該與其他事務隔離,即使它們處理的是同一組資料。
  • 永續性(Durability):這確保一旦事務完成,資料將永久存在於資料庫中。即使斷電或系統崩潰,資料也不會丟失。

Spring 支援程式設計式和宣告式兩種事務管理。它還支援全域性和本地事務。

全域性事務 vs 本地事務:

  • 本地事務處理集中式系統中的單個資料來源(例如 JDBC);
  • 全域性事務處理分散式系統中的多個資料來源(例如 JDBC、JMS)。一個全域性事務是多個本地事務的集合;

程式設計式事務與宣告式事務:

Spring 支援兩種不同型別的事務管理,稱為 程式設計式(Programatic) 和宣告式(Declarative) 事務管理:

  • 程式設計式事務:這意味著,您需要在程式碼中管理事務。很難維護;
  • 宣告式事務:這意味著要將事務管理程式碼與業務邏輯分開。因此需要使用 XML 或基於註釋的設定來管理事務。 Spring AOP 模組支援宣告式事務管理。

髒讀、幻讀和不可重複讀:

  • 髒讀:當一個事務正在更改記錄/元組並且第二個事務在原始更改被提交或回滾之前嘗試讀取此元組/記錄時,就會發生髒讀。這被稱為髒讀場景,因為第一個事務總是有可能回滾更改,導致第二個事務讀取無效值。
  • 幻讀:幻讀發生在同一查詢在事務中執行兩次,並且第二個結果集包含在第一個結果集中不可見的行。這種情況是由另一個事務在兩個查詢的執行之間插入新行引起的
  • 不可重複讀:當在同一個事務中相同的查詢產生不同的結果時,就會發生不可重複讀取。這因為當另一個事務更新其他事務返回的資料時,就會發生這種情況。

隔離與傳播:

  • 隔離度(Isolation):此事務與其他事務的工作隔離的程度。例如,這個事務可以看到來自其他事務的未提交的寫入嗎?
  • 傳播(Propagation):在傳播的情況下,程式碼將始終在事務範圍內執行。建立一個新事務或重用一個(如果可用)。

10、HibernateDAOSupport 和 HibernateTemplate

在舊版本的 spring 和 hibernate 整合中,需要 HibernateDAOSupport 和 HibernateTemplate。但是,較新版本的 Spring 不建議使用這兩個類(這裡僅做了解)。

通常我們從 HibernateDAOSupport 擴充套件我們的 DAO 類,並且 getHibernateTemplate() 方法將可用於Hibernate對談中的 CRUD 操作。由於這不是推薦的方法,所以我們在 DAO 中注入對談工廠(SessionFactory)。下面的程式碼片段會給你一些關於 HibernateDAOSupport 和 HibernateTemplate 的想法:

public class EmployeeHibernateDao extends HibernateDaoSupport implements EmployeeDao {
@Transactional(readOnly=false)
public void saveEmployee(Employee emp){
System.out.println("Create new employee " + emp);
getHibernateTemplate().save(emp);
System.out.println("Employee created " + emp);
}
}

11、Spring DAO 和 Spring ORM 的區別

DAO 是一種設計模式,以最大限度地減少應用程式和後端之間的耦合;

ORM 處理如何將物件對映到物件關聯式資料庫中,從而減少資料庫和應用程式之間的耦合。

如果您在沒有 DAO 的情況下使用 ORM,那麼您的應用程式將變得依賴於 ORM,因此很難從一個 ORM(例如Hibernate)移動到另一個 ORM(例如 NoSQL)。

Spring DAO 是使用@Repository 註解實現的。 Spring 儲存庫擴充套件 JPARepository 並傳遞 JPA 實體及其主鍵。

@Repository
public interface PersonRepository extends JPARepository<Person, PersonPK> {
public List findByFirstName(String firstName);
@Query("Your SQL query")
public List findByAddress(String firstName);
}

最後,關於Spring框架相關的概念就簡要介紹到這裡,希望這能給你進入並深入Spring技術棧一個簡單入口,而不會被Spring技術生態所驚嚇(Spring現在都成軟體開發技術的全家桶了,啥都有)——日進一步,鍥而不捨,終將大成!

到此這篇關於Spring框架核心概念總覽的文章就介紹到這了,更多相關Spring框架核心概念內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com