Java、Spring、SpringBoot

JAVA与Spring

使用 Spring 的程序

UserService.java

public class UserService {
    public String getUserName() {
        return "John Doe";
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        // 手动创建 UserService 实例
        UserService userService = new UserService();

        // 调用服务方法
        String userName = userService.getUserName();
        System.out.println("User Name: " + userName);
    }
}

Java、Spring、SpringBoot_第1张图片

问题分析
  • 手动管理依赖:需要手动创建 UserService 实例。

  • 紧耦合Main 类直接依赖于 UserService 的具体实现。

  • 难以扩展:如果需要替换 UserService 的实现,必须修改 Main 类。

 使用 Spring 的程序

代码结构

  UserService:一个简单的服务类,标记为 Spring 组件。

  Application:Spring Boot 主类,通过 Spring 容器管理依赖。

  application.properties:Spring Boot 配置文件(可选)。

import org.springframework.stereotype.Service;

@Service // 标记为 Spring 组件
public class UserService {
    public String getUserName() {
        return "John Doe";
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication // 标记为 Spring Boot 应用
public class Application {

    @Autowired // 自动注入 UserService
    private UserService userService;

    public static void main(String[] args) {
        // 启动 Spring Boot 应用
        ApplicationContext context = SpringApplication.run(Application.class, args);

        // 从 Spring 容器中获取 Application 实例
        Application app = context.getBean(Application.class);

        // 调用服务方法
        app.run();
    }

    public void run() {
        String userName = userService.getUserName();
        System.out.println("User Name: " + userName);
    }
}
ApplicationContext context = SpringApplication.run(Application.class, args);

在 Java 中,每个类在编译后都会生成一个对应的 .class 文件,包含了该类的字节码。

  • .class 文件记录了类的方法属性构造器等信息。
  • Application.class 表示 Application 类的类对象Class 类型的实例),可用于反射类型判断等操作。

SpringApplication.run() 中,Application.class 的主要作用是:

标识主类位置

  • Spring Boot 会从 Application.class 所在的包为起点,自动扫描该包及其子包中的 @Component@Service@Controller 等注解的类。

加载 Spring Boot 配置

  • @SpringBootApplication 会触发自动配置机制,加载 application.ymlapplication.properties 等配置文件。
Spring 的优越性
  1. 依赖注入(DI)

    • Spring 自动管理 UserService 的实例化,并通过 @Autowired 注入到 Application 类中。

    • 无需手动创建对象,降低了代码的耦合度。

  2. 控制反转(IoC)

    • Spring 容器负责管理对象的生命周期和依赖关系。

    • 开发者只需关注业务逻辑,无需关心对象的创建和销毁。

  3. 松耦合

    • Application 类不直接依赖于 UserService 的具体实现,而是依赖于接口或抽象。

    • 如果需要替换 UserService 的实现,只需修改配置,而无需修改 Application 类。

  4. 易于测试

    • 可以通过 Spring 的测试框架轻松注入模拟对象,进行单元测试。

  5. 模块化和可扩展性

    • Spring 的模块化设计使得应用程序易于扩展和维护。

    • 例如,可以轻松集成 Spring Data、Spring Security 等模块

Spring与SpringBoot

Spring 示例(手动配置)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService();
    }
}

public class UserService {
    public String getUserName() {
        return "John Doe";
    }
}

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = context.getBean(UserService.class);
        System.out.println("User Name: " + userService.getUserName());
    }
}

Spring Boot 示例(自动配置)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    public String getUserName() {
        return "John Doe";
    }
}

@SpringBootApplication
public class Application {
    @Autowired
    private UserService userService;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Java、Spring、SpringBoot_第2张图片
Spring与SpringBoot的区别

SpringBoot原则:约定优于配置

Java、Spring、SpringBoot_第3张图片

Java 的痛点

随着业务复杂度的提升,Java 开发中逐渐暴露出一些问题:

配置繁琐:大量的 XML 配置
组件管理复杂:需要手动编写 Bean 实例化、依赖注入等代码
代码冗余:重复的样板代码(如 JDBC 连接、事务管理等)

Java 的复杂性促使了 Spring 框架的诞生。

Spring 的优势

✅ 解耦、降低模块间的依赖
✅ 提供更清晰的架构,支持松耦合开发
✅ 简化 Web 应用和数据访问层的开发
✅ 具备优秀的社区和文档支持

Spring 的痛点

尽管 Spring 极大提升了开发效率,但在使用过程中仍存在以下问题:

配置复杂:大量的 XML 配置文件
环境搭建繁琐:Bean 管理、事务配置、MVC 设置等步骤较多
启动过程复杂:需手动配置 Web 服务器(如 Tomcat)

Spring Boot 的优势

✅ 减少 XML 和 Java 配置(使用yml)
✅ 项目结构简洁,开发效率更高
✅ 内置 Web 服务器,启动更便捷
✅ 兼容传统 Spring 项目,可平滑迁移

什么是xml

1.解耦配置信息和代码

如数据库连接信息、服务端口号、线性池大小等

你可能感兴趣的:(spring,boot,java,spring)