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

Spring 各個(gè)模塊的依賴關(guān)系

Spring Test

Spring 團(tuán)隊(duì)提倡測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)。有了控制反轉(zhuǎn) (IoC)的幫助,單元測(cè)試和集成測(cè)試變得更簡(jiǎn)單。Spring 的測(cè)試模塊對(duì) JUnit、TestNG、Mockito、PowerMock 等常用測(cè)試框架有良好的支持,并且提供了模擬 Http 請(qǐng)求等基于 Spring 的測(cè)試功能。

Core Container

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

AOP、Aspects、Instrumentation和Messaging

這些模塊提供了面向切面編程、與 AspectJ 的集成支持、為 JVM 添加代理的功能、基礎(chǔ)的報(bào)文傳送應(yīng)用支持等。

Data Access/Integration

這些模塊提供了對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的抽象、編程和聲明式事務(wù)管理、對(duì) ORM 框架的支持、OXM 支持、JMS 支持等。

Spring Web

提供了基本的 Web 開(kāi)發(fā)集成特性、Spring MVC Web 框架實(shí)現(xiàn)、WebSocket 支持、WebFlux 支持等。

Spring、SpringMVC、SpringBoot之間的關(guān)系

Spring 包含多個(gè)功能模塊,其中最重要的是 Spring-Core 模塊,其他模塊如 Spring MVC 的功能實(shí)現(xiàn)基本都依賴于該模塊。Spring MVC 是 Spring 中的一個(gè)重要模塊,主要賦予快速構(gòu)建 MVC 架構(gòu)的能力。Spring Boot 旨在簡(jiǎn)化 Spring 開(kāi)發(fā),減少配置文件,實(shí)現(xiàn)開(kāi)箱即用。

HelloWorld-xml

案例

案例源碼點(diǎn)擊 這里。

引入依賴


    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 數(shù)據(jù))

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

業(yè)務(wù)層 UserServiceImpl(調(diào)用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中設(shè)置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()));
    }
}

運(yùn)行結(jié)果:
運(yùn)行結(jié)果

如何體現(xiàn)的Spring優(yōu)勢(shì)

控制反轉(zhuǎn) – IOC

控制反轉(zhuǎn)是一種設(shè)計(jì)思想,Spring 通過(guò) IoC 容器來(lái)實(shí)現(xiàn)這一特性。用戶不再需要手動(dòng)創(chuàng)建對(duì)象,而是由 Spring 框架負(fù)責(zé)管理對(duì)象的創(chuàng)建和生命周期。這不僅提高了代碼的可維護(hù)性,還使得組件之間的依賴關(guān)系變得更加清晰。

面向切面 – AOP

AOP 的核心思想是將業(yè)務(wù)邏輯與系統(tǒng)服務(wù)邏輯分開(kāi),通過(guò)定義切面來(lái)實(shí)現(xiàn)解耦。Spring 的 AOP 模塊通過(guò)動(dòng)態(tài)代理技術(shù)在運(yùn)行時(shí)將切面邏輯織入到目標(biāo)對(duì)象中,從而實(shí)現(xiàn)日志記錄、事務(wù)管理等功能的非侵入式集成。

Spring框架逐步簡(jiǎn)化開(kāi)發(fā)

Java 配置方式改造

在傳統(tǒng)的 Spring 配置中,XML 被廣泛用于定義 Bean 和其依賴關(guān)系。然而,XML 配置容易變得冗長(zhǎng)和難以維護(hù)。Java 配置通過(guò)注解和 Java 類來(lái)替代 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 版本開(kāi)始支持基于注解的配置。通過(guò)注解,開(kāi)發(fā)者可以簡(jiǎn)化 Bean 的定義和依賴注入過(guò)程。

代碼示例

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

SpringBoot托管配置

Spring Boot 通過(guò)約定大于配置的理念,進(jìn)一步簡(jiǎn)化了 Spring 應(yīng)用的開(kāi)發(fā)。它提供了一系列的 starter 包,幫助開(kāi)發(fā)者快速搭建項(xiàng)目。

FAQ

  1. 問(wèn):Spring 框架的主要特點(diǎn)是什么?

  2. 問(wèn):如何使用 Spring 進(jìn)行依賴注入?

  3. 問(wèn):什么是 Spring Boot?

  4. 問(wèn):Spring AOP 是如何工作的?

  5. 問(wèn):Spring MVC 和 Spring Boot 有什么區(qū)別?

上一篇:

Linux 獲取命令執(zhí)行輸出結(jié)果的藝術(shù)

下一篇:

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

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)