spring--spring和springboot差别

Spring和Spring Boot是Java生态广泛使用的两个框架,它们之间有密切的关系,但也有明显的区别

一、定位和目标

  • Spring
    • Spring是一个轻量级的、模块化的Java开发框架,旨在简化企业级应用开发
    • 它提供了全面的基础设施支持,包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问、Web开发等
    • Spring的核心思想是“约定大于配置”,但开发者需要手动配置很多内容
  • Spring Boot
    • Spring Boot是Spring的扩展,旨在简化Spring应用的开发和部署
    • 它通过自动配置和约定大于配置的原则,减少了开发者的配置工作量
    • Spring Boot的目标是快速创建独立的、生产级别的Spring应用

二、项目初始化

Spring项目初始化

  • 需要手动创建Maven/Gradle项目
  • 手动添加Spring相关依赖(如spring-core、spring-web、spring-mvc等)
  • 需要配置web.xml和DispatcherServlet

示例:SpringMVC项目初始化

1、web.xml配置:

<web-app>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2、applicationContext.xml配置

<beans>
    <context:component-scan base-package="com.example" />
    <mvc:annotation-driven />
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

3、Maven依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version>
</dependency>

Spring Boot项目初始化

  • 使用 Srping Initializr快速生成项目
  • 自动配置依赖和项目结构
  • 无需配置web.xml和DispatcherServlet

1、使用Spring Initializr

  • 选择依赖(如Spring Web、Spring Data JPA)
  • 下载生成的项目

2、Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3、主类

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

三、配置方式

Spring

  • 需要大量的XML配置或Java注解配置
  • 开发者需要手动配置数据源、事务管理器、视图解析器等
  • 配置复杂,适合对Spring有深入理解的开发者

1、XML配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
    <property name="username" value="root" />
    <property name="password" value="password" />
</bean>

2、Java注解配置

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }
}

3、数据源、事务管理、视图解析器

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!--配置数据源-->
		<property name="dataSource" ref="dynamicDataSource" />
	</bean>

	<!--配置事务-->
	<tx:advice id="txAdvice">
	    <tx:attributes>
			<!--如果是查询的方式配置为只读状态的事务,提高效率-->
		    <tx:method name="get*" read-only="true" propagation="SUPPORTS" rollback-for="Exception" />
		    <tx:method name="find*" read-only="true" propagation="SUPPORTS" rollback-for="Exception"/>
		    <tx:method name="query*" read-only="true" propagation="SUPPORTS" rollback-for="Exception"/>
		    <tx:method name="select*" read-only="true" propagation="SUPPORTS" rollback-for="Exception"/>
		    <tx:method name="*" />
	    </tx:attributes>
    </tx:advice>

上面是一个配置事务的方式,总之spring阶段什么都要自己配

Spring Boot

  • 采用”约定大于配置“的原则,提供了大量的默认配置
  • 通过自动配置(Auto-Configuration)机制,减少了手动配置的工作量
  • 支持基于application.properties或application.yml的外部配置

1、application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2、自动配置

Spring Boot 会根据配置文件自动创建 DataSource Bean。

四、依赖管理

Spring

  • 需要手动管理依赖库的版本,可能会遇到依赖冲突问题
  • 开发者需要显式映引入所需的Spring模块(如Spring-core、Spring-web等)
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version>
</dependency>

Spring Boot

  • 提供了Spring-boot-stater系列依赖,简化了依赖管理
  • 提供了Spring-boot-starter-web、Spring-boot-starter-data-jpa等starter,可以快速引入常用功能
  • 自动解决依赖冲突问题
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

(这里比较经典的就是starter是什么?怎么去手写一个starter?)

五、内嵌服务器

Spring

  • 需要手动配置外部服务器(如Tomcat、jetty)
  • 部署时需要将应用打包成WAR文件并部署到服务器中

spring打包

<packaging>war</packaging>

Spring Boot

  • 内嵌了Tomcat、jetty或Undertow服务器,无需额外配置
  • 可以直接将应用打包成可执行的JAR文件,通过java -jar命令运行

Spring Boot打包

<packaging>jar</packaging>

运行应用

java -jar myapp.jar

六、监控和管理

Spring

  • 需要手动集成监控和管理功能(如Spring Actuator)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Spring Boot

  • 内置了Spring Actuator,提供了开箱即用的监控和管理功能
  • 可以轻松查看应用的健康状态、性能指标等信息
management.endpoints.web.exposure.include=*

访问端点:

http://localhost:8080/actuator/health

七、开发效率

Spring

  • 开发效率较低,需要编写大量的配置代码
  • 适合需要高度定制化的场景

Spring Boot

  • 开发效率高,通过自动配置和Starter依赖,快速构建应用
  • 适合快速原型开发和微服务架构

总结

特性SpringSpring Boot
项目初始化手动配置使用 Spring Initializr 快速生成
配置方式XML 或 Java 配置自动配置 + 外部化配置
Web 开发手动配置 DispatcherServlet自动配置 DispatcherServlet
内嵌服务器需要外部服务器内嵌服务器
依赖管理手动管理Starter 依赖 + 自动依赖管理
监控和管理需要手动集成 Actuator内置 Actuator

Spring BootSpring 的进一步封装和优化,适合快速开发和现代应用架构。如果你需要快速构建应用,推荐使用 Spring Boot;如果你需要高度定制化,可以选择 Spring

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值