iT邦幫忙

2024 iThome 鐵人賽

DAY 4
2

近年來很常聽到Java使用者要使用Spring Boot框架開發,但可能很多人還是不太清楚Spring Boot與Spring之間的關係是什麼,甚至以為很多功能是Spring Boot才有,但其實Spring Boot是基於Spring的擴展,能夠簡化開發過程。

Spring Framework

Spring Framework是一種強大的開源Java框架,提供許多功能用以簡化Java開發,包含DI(依賴注入)、AOP(面向切面)、數據存取、事務管理。主要有以下特性:

  • 依賴注入(DI,Dependency Injection):
    將依賴關係的創建與維護交由Spring容器處理,開發者只要聲明依賴,使用註解或XML配置告訴容器如何注入即可。這種設計方式能使物件之間耦合度降低,提高靈活度與測試性。
    例如,使用@Autowired自動注入UserService類的實例,不用另外在UserController手動創建:
@Service
public class UserService {
    ...
}

@Controller
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }
}

  • 面向切面編程(AOP, Aspect-Oriented Programming):
    可以將共通相似的程式邏輯集中於一個切面,避免代碼重複出現,例如日誌紀錄、DB資源控制等等。例如下面程式內容即是使用AOP,在每次執行此服務方法前需印出日誌:
@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.xxx.service..*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("executed: " + joinPoint.getSignature().getName());
    }
}
  • 事務管理:
    使用 @Transactional 註解的方法會在資料庫操作時保證:若操作失敗,先前的操作都會回滾,避免資料不一致。例如,下面的程式碼使用@Transactional,確保executeTransaction方法都要成功執行,才能更新,否則需要回滾。
@Service
public class TestTransactionService {
    @Transactional
    public void executeTransaction() {
        // Do some database operations
        System.out.println("Transaction executed");
        // If any operation fails, changes will rolled back
    }
}

此外,Web框架(如Spring MVC)、Spring Data、Spring Security等功能也屬於Spring Framework,可見Spring Framework具有高度的靈活性與擴展性。
這些功能通常需要使用XML配置Bean和依賴關係,雖然有支援基本的註解配置,但手動配置繁瑣,容易增加專案的複雜性和出錯機率,進而提升學習與維護的難度。

Spring Boot

Spring Boot則是基於前述Spring Framework的擴展,能自動配置、起始依賴、內嵌伺服器來加速開發過程。特點如下:

  • 自動配置
    最大特性是簡化了Spring的配置,引入自動配置的概念,透過依賴能快速引入使用,對於第三方庫,像是JDBC、Redis幾乎能零配置使用,不再需要繁瑣的配置過程。
  • 開箱即用
    與spring不同,有內嵌伺服器(Tomcat, Jetty, Undertow…),使應用可以獨立運行,不需外部伺服器的額外部署。這種內嵌伺服器的特性使應用部署更加簡單且便利。
  • 起始依賴
    Spring Boot提供起始依賴(如spring-boot-starter-data-jpa、spring-boot-starter-web),這些都能簡化庫的管理和集成。對於小型應用或微服務架構能降低配置複雜度,使開發人員專注於業務邏輯的實現。
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

綜合上述,Spring Boot的核心是簡化開發配置,而許多強大功能是Spring Framework,兩者的有效結合可以顯著提升開發效率,使開發人員能夠更專注於業務需求。

※額外補充:Servlet
先前轉職班是從Servlet學起,因此也查了一下Servlet差異。
Servlet是Java EE(現稱Jakarta EE)的一部分,負責客戶端的HTTP請求並生成響應。相較於Spring框架這類高層次抽象和功能,Servlet屬於低級別的Web組件。
在Servlet當中,若要實現 HttpServlet 類,則須重寫 doGet()、doPost() 處理HTTP請求,寫起來很冗長,並且也需要在web.xml配置Servlet的映射,指定哪些URL應該由特定的Servlet處理。
此差異可參考後續restful說明,了解使用Spring框架能如何簡化Web開發過程。

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest request, 
    					HttpServletResponse response) 
                        throws ServletException, IOException {
       request.getRequestDispatcher("/home.jsp").forward(request, response);
  }
}

上一篇
選對資料庫,讓開發更輕鬆
下一篇
跟東坡肉一樣有三層—解剖MVC分層架構
系列文
從卡關到通關的Spring Boot 腦內風暴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言