Spring5.x 版本中 Web 模塊的 Portlet 組件已經被廢棄掉,同時增加了用于異步響應式處理的 WebFlux 組件。

Spring 各個模塊的依賴關系

Spring Test

Spring 團隊提倡測試驅動開發(TDD)。有了控制反轉 (IoC)的幫助,單元測試和集成測試變得更簡單。Spring 的測試模塊對 JUnit、TestNG、Mockito、PowerMock 等常用測試框架有良好的支持,并且提供了模擬 Http 請求等基于 Spring 的測試功能。

Core Container

Spring 框架的核心模塊,主要提供 IoC 依賴注入功能的支持,由 Beans 模塊、Core 核心模塊、Context 上下文模塊和 SpEL 表達式語言模塊組成。沒有這些核心容器,也就不可能有 AOP、Web 等上層的功能。

AOP、Aspects、Instrumentation和Messaging

這些模塊提供了面向切面編程、與 AspectJ 的集成支持、為 JVM 添加代理的功能、基礎的報文傳送應用支持等。

Data Access/Integration

這些模塊提供了對數據庫訪問的抽象、編程和聲明式事務管理、對 ORM 框架的支持、OXM 支持、JMS 支持等。

Spring Web

提供了基本的 Web 開發集成特性、Spring MVC Web 框架實現、WebSocket 支持、WebFlux 支持等。

Spring、SpringMVC、SpringBoot之間的關系

Spring 包含多個功能模塊,其中最重要的是 Spring-Core 模塊,其他模塊如 Spring MVC 的功能實現基本都依賴于該模塊。Spring MVC 是 Spring 中的一個重要模塊,主要賦予快速構建 MVC 架構的能力。Spring Boot 旨在簡化 Spring 開發,減少配置文件,實現開箱即用。

HelloWorld-xml

案例

案例源碼點擊 這里

引入依賴


    8
    8
    5.3.37
    1.9.6

        org.springframework
        spring-context
        ${spring.version}

        org.springframework
        spring-core
        ${spring.version}

        org.springframework
        spring-beans
        ${spring.version}

        org.aspectj
        aspectjweaver
        ${aspectjweaver.version}

POJO – User

public class User {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

DAO 獲取 POJO, UserDaoServiceImpl (mock 數據)

public class UserDaoImpl{
    public List findUserList() {
        return Collections.singletonList(new User("seven", 18));
    }
}

業務層 UserServiceImpl(調用DAO層)

public class UserServiceImpl {
    private UserDaoImpl userDao;
    public void setUserDao(UserDaoImpl userDao) {
        this.userDao = userDao;
    }
    public List findUserList() {
        return userDao.findUserList();
    }
}

攔截所有service中的方法,并輸出記錄

@Aspect
public class LogAspect {
    @Around("execution(* com.seven.springhelloworldxml.service.*.*(..))")
    public Object businessService(ProceedingJoinPoint pjp) throws Throwable {
        Method method = ((MethodSignature) pjp.getSignature()).getMethod();
        System.out.println("execute method: " + method.getName());
        return pjp.proceed();
    }
}

添加并增加spring.xml和aspects.xml





APP中設置xml文件

public class APP {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("aspects.xml", "spring.xml");
        UserServiceImpl service = context.getBean("userService", UserServiceImpl.class);
        List userList = service.findUserList();
        userList.forEach(a -> System.out.println(a.getName() + "," + a.getAge()));
    }
}

運行結果:
運行結果

如何體現的Spring優勢

控制反轉 – IOC

控制反轉是一種設計思想,Spring 通過 IoC 容器來實現這一特性。用戶不再需要手動創建對象,而是由 Spring 框架負責管理對象的創建和生命周期。這不僅提高了代碼的可維護性,還使得組件之間的依賴關系變得更加清晰。

面向切面 – AOP

AOP 的核心思想是將業務邏輯與系統服務邏輯分開,通過定義切面來實現解耦。Spring 的 AOP 模塊通過動態代理技術在運行時將切面邏輯織入到目標對象中,從而實現日志記錄、事務管理等功能的非侵入式集成。

Spring框架逐步簡化開發

Java 配置方式改造

在傳統的 Spring 配置中,XML 被廣泛用于定義 Bean 和其依賴關系。然而,XML 配置容易變得冗長和難以維護。Java 配置通過注解和 Java 類來替代 XML 配置,使得配置更加直觀和易于管理。

代碼示例

@EnableAspectJAutoProxy
@Configuration
public class BeansConfig {
    @Bean("userDao")
    public UserDaoImpl userDao() {
        return new UserDaoImpl();
    }
    @Bean("userService")
    public UserServiceImpl userService() {
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(userDao());
        return userService;
    }
    @Bean("logAspect")
    public LogAspect logAspect() {
        return new LogAspect();
    }
}

注解配置方式改造

隨著 Java 5 引入注解,Spring 從 2.5 版本開始支持基于注解的配置。通過注解,開發者可以簡化 Bean 的定義和依賴注入過程。

代碼示例

@Service
public class UserServiceImpl {
    @Autowired
    private UserDaoImpl userDao;
    public List findUserList() {
        return userDao.findUserList();
    }
}

SpringBoot托管配置

Spring Boot 通過約定大于配置的理念,進一步簡化了 Spring 應用的開發。它提供了一系列的 starter 包,幫助開發者快速搭建項目。

FAQ

  1. 問:Spring 框架的主要特點是什么?

  2. 問:如何使用 Spring 進行依賴注入?

  3. 問:什么是 Spring Boot?

  4. 問:Spring AOP 是如何工作的?

  5. 問:Spring MVC 和 Spring Boot 有什么區別?

上一篇:

Linux 獲取命令執行輸出結果的藝術

下一篇:

方差分析(ANOVA)詳解與應用
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費