Java企业级开发系列(1)

Spring Framework入门指南:从零开始构建企业级应用 🚀

🎯 掌握Spring框架,助你成为Java企业级开发高手!

在上一篇文章中,我们学习了Java入门系列的最后一篇文章--Java反射机制。今天开始,让我们一起深入探索Spring框架,这个Java领域最受欢迎的企业级开发框架!

考虑到相关内容较多,咱们这个系列分为四个部分进行更新!

废话不多说,开始第一部分!

1. Spring框架简介 📚

1.1 什么是Spring Framework?

Spring Framework是一个轻量级的开源应用框架,它为开发Java应用提供了全面的基础设施支持。Spring的核心特性是依赖注入(DI)和面向切面编程(AOP)。

1.2 为什么选择Spring?

  • 🔸 模块化设计,按需使用
  • 🔸 松耦合,易于测试
  • 🔸 强大的生态系统
  • 🔸 活跃的社区支持
  • 🔸 广泛的企业应用

1.3 Spring的核心模块

spring-core
├── spring-beans       # Bean容器和依赖注入
├── spring-context     # 应用上下文,邮件,定时任务等
├── spring-aop         # 面向切面编程
├── spring-jdbc        # 数据库访问
├── spring-orm        # 对象关系映射
├── spring-web        # Web开发基础
└── spring-webmvc     # Web MVC框架

2. 快速开始 🚀

2.1 环境准备

首先,在Maven项目中添加Spring依赖:

xml 复制代码
<dependencies>
    <!-- Spring核心依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.23</version>
    </dependency>
    
    <!-- Spring Web MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.23</version>
    </dependency>
    
    <!-- 数据库相关 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.23</version>
    </dependency>
    
    <!-- Lombok(可选) -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2.2 第一个Spring应用

创建一个简单的Spring应用,展示依赖注入的基本用法:

java 复制代码
// 用户实体
@Data
@AllArgsConstructor
public class User {
    private Long id;
    private String username;
    private String email;
}

// 用户服务接口
public interface UserService {
    User getUserById(Long id);
    void createUser(User user);
}

// 用户服务实现
@Service
@Slf4j
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;
    
    @Override
    public User getUserById(Long id) {
        log.info("获取用户信息: {}", id);
        return userRepository.findById(id);
    }
    
    @Override
    public void createUser(User user) {
        log.info("创建用户: {}", user);
        userRepository.save(user);
    }
}

// 应用配置类
@Configuration
@ComponentScan("com.example.demo")
public class AppConfig {
    @Bean
    public UserRepository userRepository() {
        return new UserRepositoryImpl();
    }
}

// 主类
public class MainApplication {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = context.getBean(UserService.class);
        
        User user = new User(1L, "张三", "zhangsan@example.com");
        userService.createUser(user);
        
        User foundUser = userService.getUserById(1L);
        System.out.println("找到用户:" + foundUser);
    }
}

3. Spring核心特性详解 💡

3.1 依赖注入(DI)

Spring提供了多种依赖注入方式:

java 复制代码
// 1. 构造器注入(推荐)
@Service
public class OrderService {
    private final UserService userService;
    private final PaymentService paymentService;
    
    @Autowired
    public OrderService(UserService userService, PaymentService paymentService) {
        this.userService = userService;
        this.paymentService = paymentService;
    }
}

// 2. Setter注入
@Service
public class ProductService {
    private InventoryService inventoryService;
    
    @Autowired
    public void setInventoryService(InventoryService inventoryService) {
        this.inventoryService = inventoryService;
    }
}

// 3. 字段注入(不推荐)
@Service
public class CartService {
    @Autowired
    private ProductService productService;
}

3.2 面向切面编程(AOP)

AOP允许我们将横切关注点(如日志、事务)从业务逻辑中分离出来:

java 复制代码
// 日志切面
@Aspect
@Component
@Slf4j
public class LoggingAspect {
    
    @Around("@annotation(LogExecutionTime)")
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long endTime = System.currentTimeMillis();
        
        log.info("方法 {} 执行耗时: {}ms",
            joinPoint.getSignature().getName(),
            (endTime - startTime));
            
        return result;
    }
    
    @AfterThrowing(pointcut = "execution(* com.example.demo.service.*.*(..))",
                   throwing = "ex")
    public void logError(JoinPoint joinPoint, Exception ex) {
        log.error("方法 {} 执行异常: {}",
            joinPoint.getSignature().getName(),
            ex.getMessage());
    }
}

// 自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

// 使用示例
@Service
public class UserService {
    @LogExecutionTime
    public User findById(Long id) {
        // 业务逻辑
    }
}

系列的第一部分,到此暂告一段落,内容包含了Spring的基础介绍和核心特性。

如果你觉得这篇文章有帮助,欢迎点赞转发,也期待在评论区看到你的想法和建议!👇

咱们下一期见!

相关推荐
IT书架2 分钟前
golang面试题
开发语言·后端·golang
初遇你时动了情20 分钟前
uniapp 城市选择插件
开发语言·javascript·uni-app
天天扭码24 分钟前
五天SpringCloud计划——DAY1之mybatis-plus的使用
java·spring cloud·mybatis
程序猿小柒30 分钟前
leetcode hot100【LeetCode 4.寻找两个正序数组的中位数】java实现
java·算法·leetcode
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
zongzi_4941 小时前
二次封装的天气时间日历选择组件
开发语言·javascript·ecmascript
丁总学Java1 小时前
Maven项目打包,com.sun.tools.javac.processing
java·maven
kikyo哎哟喂1 小时前
Java 代理模式详解
java·开发语言·代理模式
Doker 多克1 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt
duration~1 小时前
SpringAOP模拟实现
java·开发语言