一、spring 概述

本文通过实例展示了如何在不使用Spring时手动完成基本功能,然后引入Spring框架进行简化,包括XML配置、依赖注入和数据库切换。最后介绍了Spring框架的模块及其在不同场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、spring 概述
二、XML配置spring容器


spring 概述

1.1 简单案例

如下图所示,模拟一个简单的MVC项目,前端发起查询产品请求,后端通过查询数据库返回前端请求结果。

spring demo 结构图

1.1.1 没有使用spring案例

1.1.1.1 完成基本功能

Product商品类

src\main\java\org\ieening\entity\Product.java

package org.ieening.entity;

public class Product {
    private int id;
    private String name;

    public Product() {
        System.out.println("product init ... ");
    }
}

ProductService服务接口

src\main\java\org\ieening\service\ProductService.java

package org.ieening.service;

import org.ieening.entity.Product;

public interface ProductService {
    Product getProductById();
}

ProductServiceImpl商品服务实现类

package org.ieening.service.impl;

import org.ieening.dao.ProductDao;
import org.ieening.dao.impl.ProductDaoMysqlImpl;
import org.ieening.dao.impl.ProductDaoOracleImpl;
import org.ieening.entity.Product;
import org.ieening.service.ProductService;

public class ProductServiceImpl implements ProductService {
    // ProductDao productDao = new ProductDaoMysqlImpl();
    ProductDao productDao = new ProductDaoOracleImpl();

    public ProductDao getProductDao() {
        return productDao;
    }

    public void setProductDao(ProductDao productDao) {
        this.productDao = productDao;
    }

    @Override
    public Product getProductById() {
        System.out.println("");
        return productDao.selectProductById();
    }

}

商品数据Dao访问接口

src\main\java\org\ieening\dao\ProductDao.java

package org.ieening.dao;

import org.ieening.entity.Product;

public interface ProductDao {
    Product selectProductById();
}

ProductDaoMySQLImpl 使⽤MySQL数据库的数据访问实现类

src\main\java\org\ieening\dao\impl\ProductDaoMysqlImpl.java

package org.ieening.dao.impl;

import org.ieening.dao.ProductDao;
import org.ieening.entity.Product;

public class ProductDaoMysqlImpl implements ProductDao {

    @Override
    public Product selectProductById() {
        System.out.println("search Product in mysql database");
        return new Product();
    }

}

测试类

src\main\java\org\ieening\controller\TestProductServiceWithoutSpring.java

package org.ieening.controller;

import org.ieening.service.impl.ProductServiceImpl;

public class TestProductServiceWithoutSpring {
    public static void main(String[] args) {
        ProductServiceImpl productServiceImpl = new ProductServiceImpl();
        productServiceImpl.getProductById();
    }
}

运行测试类,得到结果:

search Product in mysql database
product init ... 
1.1.1.2 更换数据库

如果想要修改成使用Oracle数据库时,需要完成的步骤:

  1. 增加Oracle数据库ProductDao实现类;

    package org.ieening.dao.impl;
    
    import org.ieening.dao.ProductDao;
    import org.ieening.entity.Product;
    
    public class ProductDaoOracleImpl implements ProductDao {
    
        @Override
        public Product selectProductById() {
            System.out.println("search Product in oracle database");
            return new Product();
        }
    }
    
  2. 修改核心代码src\main\java\org\ieening\service\impl\ProductServiceImpl.java

使用一般方法完成的项目修改功能时,不仅需要增加新的功能,还需要修改原来的业务代码,这样做的风险是非常高的。

1.1.2 使用spring

修改上面的案例,使用spring。使用Spring需要导入相关的jar包,导入完成后,增加spring.xml文件。

src\main\resources\spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.ieening.entity.Product" id="product" />
    <bean class="org.ieening.dao.impl.ProductDaoMysqlImpl" id="productDaoMysqlImpl" />
    <bean class="org.ieening.dao.impl.ProductDaoOracleImpl" id="productDaoOracleImpl" />
    <bean class="org.ieening.service.impl.ProductServiceImpl" id="productService">
        <property name="productDao" ref="productDaoMysqlImpl"></property> <!-- 注释1-->
    </bean>
</beans>

修改测试代码:

package org.ieening.controller;

import org.ieening.service.impl.ProductServiceImpl;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestProductServiceWithSpring {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
                "spring.xml");
        ProductServiceImpl productService = (ProductServiceImpl) classPathXmlApplicationContext
                .getBean("productService");
        productService.getProductById();
        classPathXmlApplicationContext.close();
    }
}

spring框架的加持下,想要实现更换成Oracle数据库,只需要将注释1中ref属性修改为productDaoMysqlImpl即可。

测试代码 – helloworld

1.2 spring 框架介绍

整个Spring框架被分成多个模块,应⽤程序可以选择需要的部分。core是核⼼容器的模块,包括模块配置和依赖注⼊机制。Spring框架还为不同的应⽤程序体系结构提供了基础⽀持,包括消息传递,事务数据和持久化以及Web,还包括基于ServletSpring MVC Web框架,以及Spring WebFlux响应式Web框架。

spring framework

GroupIdArtifactId说明
org.springframeworkspring-beansBean支持,包含Groovy
org.springframeworkspring-aop基于代理的AOP支持
org.springframeworkspring-aspects基于AspectJ的切面
org.springframeworkspring-context应用上下文运行时,包括调度和远程抽象
org.springframeworkspring-context-support⽀持将常⻅的第三⽅类库集成到 Spring 应⽤上下 ⽂
org.springframeworkspring-core其他模块所依赖的核⼼模块
org.springframeworkspring-expressionSpring 表达式语⾔,SpEL
org.springframeworkspring-instrumentJVM 引导的仪表(监测器)代理
org.springframeworkspring-instrumenttomcatTomcat 的仪表(监测器)代理
org.springframeworkspring-jdbc⽀持包括数据源设置和 JDBC 访问⽀持
org.springframeworkspring-jms⽀持包括发送/接收JMS消息的助⼿类
org.springframeworkspring-messaging对消息架构和协议的⽀持
org.springframeworkspring-orm对象/关系映射,包括对 JPA 和 Hibernate 的⽀持
org.springframeworkspring-oxm对象/XML 映射(Object/XML Mapping,OXM)
org.springframeworkspring-test单元测试和集成测试⽀持组件
org.springframeworkspring-tx事务基础组件,包括对 DAO 的⽀持及 JCA 的集成
org.springframeworkspring-webweb⽀持包,包括客户端及web远程调⽤
org.springframeworkspring-webmvcREST web 服务及 web 应⽤的 MVC 实现
org.springframeworkspring-webmvc-portlet⽤于 Portlet 环境的MVC实现
org.springframeworkspring-websocketWebSocket 和 SockJS 实现,包括对 STOMP 的⽀ 持
org.springframeworkspring-jcljakarta Commons Logging ⽇志系统
<think>嗯,用户问的是Spring Boot的概述,需要用中文回答。首先,我需要回忆Spring Boot的基本概念和主要特点。Spring Boot是为了简化Spring应用的初始搭建和开发过程而设计的,对吧?那它的核心功能包括自动配置、起步依赖,还有内嵌服务器这些。 接下来,用户可能想知道为什么使用Spring Boot,所以需要说明它解决的问题,比如传统的Spring配置复杂,需要大量的XML或者Java配置。Spring Boot通过约定优于配置,减少了开发者的工作量。 然后可能需要分点介绍主要特性,比如自动配置、起步依赖、内嵌容器、Actuator监控等。每个特性需要简单解释,让用户明白它们的作用。例如,自动配置会根据项目的依赖自动配置Bean,起步依赖则是把常用的依赖组合在起,简化构建配置。 另外,用户可能对Spring Boot的优势感兴趣,比如快速开发、微服务支持、与Spring生态系统的集成。这里需要强调Spring Boot如何提升开发效率,适合现代应用开发,特别是云原生和微服务架构。 还要提到Spring Boot的生态系统,比如Spring Data、Spring Security等,说明它们如何与Spring Boot协同工作,增强功能。 最后,可能需要个简单的示例,比如创建个简单的REST API,展示Spring Boot的简洁性。但用户的问题只是要求介绍,可能不需要代码示例,但如果有的话会更直观。 需要注意的是,用户可能是刚开始学习Spring Boot的开发人员,所以语言要通俗易懂,避免过于技术化的术语,或者在必要时解释术语。同时,要确保信息准确,结构清晰,让用户能够快速抓住重点。 可能还需要检查是否有遗漏的重要点,比如Spring Boot的版本要求,系统需求,或者与其它框架的对比,但根据问题,概述应该集中在核心概念和优势上,不需要太深入细节。 总结下来,回答的结构应该是先定义Spring Boot,然后说明它的目的和解决的问题,接着列出主要特性,再讲优势,最后提下生态系统和适用场景。这样用户就能有个全面的理解。</think>**Spring Boot 概述** **1. 什么是 Spring Boot?** Spring Boot 是 **Spring 框架**的个扩展项目,旨在简化基于 Spring 的应用开发流程。它通过提供默认配置、自动化依赖管理和开箱即用的工具,让开发者能够快速搭建独立运行、生产级的 Spring 应用,无需繁琐的 XML 配置。 **2. 为什么使用 Spring Boot?** 传统 Spring 应用需要手动配置大量组件(如数据源、MVC 等),而 Spring Boot 的核心目标是: ✅ **约定优于配置**:通过智能默认值减少手动配置。 ✅ **快速启动**:几分钟内创建可运行的应用程序。 ✅ **轻量级**:内嵌服务器(Tomcat/Jetty)使应用独立部署。 ✅ **微服务友好**:天然适合构建模块化、分布式的微服务架构。 **3. 核心特性** - **自动配置(Auto-Configuration)** 根据项目依赖(如 JDBC、JPA、Redis)自动配置 Spring Bean,无需手动编写配置类。 - **起步依赖(Starter Dependencies)** 通过 `spring-boot-starter-*` 依赖包(如 `spring-boot-starter-web`)键集成常用功能,解决依赖版本冲突问题。 - **内嵌服务器(Embedded Server)** 默认内嵌 Tomcat,应用可直接打包为 JAR 文件运行,无需部署到外部 Web 服务器。 - **Actuator 监控** 提供生产级端点(如健康检查、性能指标),方便监控和管理应用。 - **外部化配置** 支持 `application.properties` 或 `application.yml` 文件,轻松管理不同环境(开发、测试、生产)的配置。 **4. 主要优势** - **开发效率高**:减少 80% 以上的配置代码,专注业务逻辑。 - **生态丰富**:无缝集成 Spring Data(数据库)、Spring Security(安全)、Spring Cloud(微服务)等组件。 - **云原生支持**:与 Docker、Kubernetes 等云技术天然兼容。 - **简化部署**:通过 `java -jar` 命令即可启动应用。 **5. 适用场景** - 快速构建 RESTful API 或微服务 - 开发企业级后台管理系统 - 创建批处理任务或定时任务 - 构建云原生应用 **6. 简单示例** Spring Boot 应用的入口类仅需几行代码: ```java @SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } } ``` **总结** Spring Boot 通过“开箱即用”的设计哲学,显著降低了 Spring 应用的门槛,成为 Java 领域最流行的开发框架之,尤其适合追求高效开发和敏捷交付的现代项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值