Day 15:Spring 框架基础

embedded/2024/12/27 10:19:00/

目标

理解 Spring 核心概念,学习依赖注入(DI)和控制反转(IoC)的基本实现方式,并能够配置一个简单的 Spring 项目。

1. 什么是 Spring?

Spring 是一个轻量级的开源框架,旨在解决企业级应用开发中的复杂性。它提供了一种简单、灵活的方式来管理对象之间的依赖关系,促进模块化和可测试性。

2. Spring 的核心模块
  1. Spring IoC(Inversion of Control)容器
    IoC 容器是 Spring 的核心,负责管理对象的创建、配置和生命周期。

    • Bean:由 IoC 容器管理的对象。
    • 依赖注入(DI):通过容器将对象的依赖关系注入到类中。
  2. Spring AOP(Aspect-Oriented Programming)
    提供面向切面编程功能,用于实现横切关注点(如日志、事务管理)。

3. DI 的实现方式
  1. 基于 XML 的配置
    在 Spring 的早期版本中,XML 是主要的配置方式,通过 <bean> 标签定义对象及其依赖关系。

  2. 基于注解的配置(推荐方式)

    • @Component:将类标记为 Spring 管理的组件。
    • @Autowired:自动注入依赖对象。
    • @Configuration 和 @Bean:定义配置类和 Bean。

实践操作:配置一个简单的 Spring 项目

1. 项目结构
src
├── com.example
│   ├── service
│   │   ├── GreetingService.java
│   │   └── GreetingServiceImpl.java
│   ├── controller
│   │   └── GreetingController.java
│   └── AppConfig.java
└── Main.java
 2. 定义服务类和实现类 
package com.example.service;public interface GreetingService {String sayHello(String name);
}
package com.example.service;import org.springframework.stereotype.Service;@Service  // 标记为 Spring 管理的服务类
public class GreetingServiceImpl implements GreetingService {@Overridepublic String sayHello(String name) {return "Hello, " + name + "!";}
}
 3. 定义控制器类
package com.example.controller;import com.example.service.GreetingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller  // 标记为 Spring 管理的控制器类
public class GreetingController {private final GreetingService greetingService;@Autowired  // 自动注入 GreetingService 实现类public GreetingController(GreetingService greetingService) {this.greetingService = greetingService;}public void greet(String name) {System.out.println(greetingService.sayHello(name));}
}
4. 配置 Spring 容器
package com.example;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration  // 标记为配置类
@ComponentScan("com.example")  // 扫描指定包及其子包中的组件
public class AppConfig {
}
5. 启动容器并调用方法
package com.example;import com.example.controller.GreetingController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {// 创建 Spring 容器ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 获取 GreetingController BeanGreetingController controller = context.getBean(GreetingController.class);// 调用方法controller.greet("World");}
}

总结

  1. Spring IoC 容器

    • IoC 容器通过配置文件或注解管理对象的创建和依赖关系。
    • 依赖注入(DI)是 Spring 的核心机制。
  2. 基于注解的配置

    • 使用 @Component 标记组件类。
    • 使用 @Autowired 自动注入依赖。
  3. 实际应用场景

    • 模块化开发:将服务、控制器等分离,降低耦合度。
    • 可测试性:通过注入依赖轻松替换实现类或模拟对象。

使用场景

  1. 构建微服务
    使用 Spring Boot 快速构建 RESTful 服务,管理依赖关系并实现模块化开发。

  2. 企业级应用
    在复杂项目中,Spring 提供统一的依赖管理方式,简化开发流程,提高代码可维护性。

  3. 注解驱动开发
    使用注解替代传统 XML 配置,减少配置文件冗余,提高开发效率。

 


http://www.ppmy.cn/embedded/149148.html

相关文章

【Go】Go数据类型详解—map

1. 前言 本篇博客将会介绍Go语言当中的另一大核心数据类型——map&#xff08;映射&#xff09;&#xff0c;当然在介绍这个数据类型之前我们还是要思考引入这个数据类型的原因&#xff1a; ❓ 需求&#xff1a;要求完成对一个班级所有同学的信息管理&#xff08;包括但不限于…

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期&#xff0c;GitLab Inc. 针对其 SaaS 产品做了限制&#xff0c;如果被判定为国内用户&#xff0c;则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品&#xff08;GitLab.com&#xff09;迁移到极狐GitL…

人工智能的崛起:从机器学习到深度学习,再到计算机视觉

在科技迅速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经从科幻的想象&#xff0c;逐步成为改变社会的核心动力之一。从自动驾驶到智能语音助手&#xff0c;从医疗诊断到推荐系统&#xff0c;人工智能技术的应用场景无处不在。在这些技术背后&#xff0c;机器…

解锁 Claude 的无限潜力:Prompt Engineering 从入门到精通

在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;如 Claude 的崛起&#xff0c;为我们带来了前所未有的机遇。然而&#xff0c;如何有效地与这些强大的模型进行交互&#xff0c;使其发挥出最大的潜力&#xff0c;成为了关键。Prompt Engineering&#xff08…

基于ArcGIS Pro的SWAT模型在流域水循环、水生态模拟中的应用及案例分析;SWAT模型安装、运行到结果读取全流程指导

目前&#xff0c;流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型&#xff0c;能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…

稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM

一、引言 碰一碰发视频作为一种新兴的信息传递和交互方式&#xff0c;在多个领域展现出了广阔的应用前景&#xff0c;尤其是在商业推广、文化传播、教育等方面。碰一碰矩阵则是对传统碰一碰技术的一种拓展&#xff0c;通过多个碰一碰设备或标签的组合&#xff0c;实现更复杂的功…

监听器listener

文章目录 监听器( listener)对Application内置对象监听的语法和配置对session内置对象监听的语法和配置 监听器( listener) 对象与对象的关系&#xff1a; 继承关联 tomcat一启动创建的顺序&#xff1a;监听器&#xff0c;config&#xff0c;application(全局初始化参数)&am…

关于埃斯顿机器人文件导出或者系统日志导出

关于埃斯顿机器人文件导出或者日志导出&#xff0c;登录模式&#xff0c;选择高级设置&#xff0c;控制器备份恢复 选择U盘导入地址&#xff0c;点击导出&#xff0c;等待时间30秒就可以查看文件格式和系统日志