近年來很常聽到Java使用者要使用Spring Boot框架開發,但可能很多人還是不太清楚Spring Boot與Spring之間的關係是什麼,甚至以為很多功能是Spring Boot才有,但其實Spring Boot是基於Spring的擴展,能夠簡化開發過程。
Spring Framework是一種強大的開源Java框架,提供許多功能用以簡化Java開發,包含DI(依賴注入)、AOP(面向切面)、數據存取、事務管理。主要有以下特性:
@Service
public class UserService {
...
}
@Controller
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
}
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.xxx.service..*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("executed: " + joinPoint.getSignature().getName());
}
}
@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 Framework的擴展,能自動配置、起始依賴、內嵌伺服器來加速開發過程。特點如下:
@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);
}
}