面试官:Spring Boot和Spring有什么区别?

前言今天本篇文章主要聚焦说说,spring boot和spring究竟有啥区别,重点对比MVC模块以及Security模块在两大框架使用时的区别。1 、啥是sp

大家好,面试官:Spring Boot和Spring有什么区别?相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于面试官:Spring Boot和Spring有什么区别?和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

1 、啥是spring?

简而言之,Spring框架为开发Java应用程序提供了全面的基础设施支持。

它包括一些不错的功能,例如依赖项注入和开箱即用的模块,例如:

Spring JDBCSpring MVCSpring SecuritySpring AOPSpring ORMSpring Test 这些模块可以大大缩短应用程序的开发时间。

例如,在Java Web开发的早期阶段,我们需要编写大量重复的代码来向数据源插入记录。但是通过使用Spring JDBC模块的JDBCTemplate,我们可以将其简化为一些简单的配置或几行代码。

2,啥是spring boot?

Spring Boot 基本上是Spring 框架的扩展,消除了设置Spring 应用程序所需的复杂例程配置。

它的目标与Spring 的目标一致,为更快、更高效的开发生态系统铺平了道路。

以下是Spring Boot 的一些功能:

通过starter依赖,简化构建和复杂的应用配置,直接启动main函数。嵌入式Web服务器避免了应用程序部署的复杂性。 Metrics测量、Health check健康检查和外部化配置自动配置Spring功能——尽可能的,下面更详细地解释两者之间的区别:

3 、Maven依赖

首先,让我们看看使用Spring 创建Web 应用程序所需的最低依赖项:

依赖项groupIdorg.springframework/groupId artifactIdspring-web/artifactId version5.1.0.RELEASE/version/dependencydependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version5.1.0.RELEASE/version/dependency

与Spring 不同,Spring Boot 只需要一个依赖项即可启动和运行Web 应用程序:

依赖项groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId version2.0.5.RELEASE/version/dependency

在构建过程中,所有其他依赖项将自动添加到最终存档中。

另一个很好的例子是测试库。我们通常使用Spring Test、JUnit、Hamcrest 和Mockito 库集。在Spring 项目中,我们应该添加所有这些库作为依赖项。

但在Spring Boot 中,我们只需要用于测试的启动器依赖项即可自动包含这些库。

面试官:Spring Boot和Spring有什么区别?

Spring Boot 为不同的Spring 模块提供了许多启动器依赖项。一些最常用的是:

spring-boot-starter-data-jpaspring-boot-starter-securityspring-boot-starter-testspring-boot-starter-webspring-boot-starter-thymeleaf

4 、MVC配置

让我们探索使用Spring 和Spring Boot 所需的配置创建JSP Web 应用程序。

公共类MyWebAppInitializer 实现WebApplicationInitializer { @Override public void onStartup(ServletContext container) { AnnotationConfigWebApplicationContext context=new AnnotationConfigWebApplicationContext(); } context.setConfigLocation(‘com.test.package’);容器.addListener(new ContextLoaderListener(context)); Servlet注册。动态调度程序=容器.addServlet(‘dispatcher’, new DispatcherServlet(context));调度程序.setLoadOnStartup(1);调度程序.addMapping(‘/’);我们还需要在@Configuration注解类中添加@EnableWebMvc注解,并定义一个视图解析器来解析从控制器返回的视图:

@EnableWebMvc@Configurationpublic class ClientWebConfig 实现WebMvcConfigurer { @Bean public ViewResolver viewResolver() { InternalResourceViewResolver bean=new InternalResourceViewResolver(); } bean.setViewClass(JstlView.class); bean.setPrefix(‘/WEB-INF/view/’); bean .setSuffix(‘.jsp’);返回豆;与所有这些相比,一旦我们添加Spring boot web starter,Spring Boot 只需要几个属性即可使上述功能正常工作:

spring.mvc.view.prefix=/WEB-INF/jsp/spring.mvc.view.suffix=.jsp 上面的所有Spring 配置都会通过称为自动配置的过程添加Boot Web 启动器来自动包含。

这意味着Spring Boot 将自动扫描应用程序中存在的依赖项、属性和bean,并根据这些启用适当的配置。

5 、配置模板引擎

我们来看看如何在Spring和Spring Boot中配置Thymeleaf模板引擎。两者有什么区别?

在Spring 中,我们需要添加thymeleaf-spring5 依赖项以及视图解析器的一些配置:

@Configuration@EnableWebMvcpublic 类MvcWebConfig 实现WebMvcConfigurer { @Autowired 私有ApplicationContext applicationContext; @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver=new SpringResourceTemplateResolver(); templateResolver.setApplicationContext(applicationContext); templateResolver.setPrefix(‘/WEB-I NF/views/’); templateResolver.setSuffix(‘.html’);返回模板解析器; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine=new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); templateEngine.setEnableSpringELCompiler(true);返回模板引擎; } @Override public void configureViewResolvers(ViewResolverRegistryregistry) { ThymeleafViewResolver 解析器=new ThymeleafViewResolver();解析器.setTemplateEngine(templateEngine());注册表.viewResolver(解析器); Spring Boot 仅需要spring-boot-starter-thymeleaf 依赖项即可在Web 应用程序中启用Thymeleaf 支持。

一旦依赖添加成功,我们就可以将模板添加到src/main/resources/templates 文件夹中,Spring Boot 会自动显示它们。

6 、安全配置

为了简单起见,我们将了解如何使用这些框架启用默认的HTTP 基本身份验证。

我们首先看一下使用Spring 启用安全性所需的依赖项和配置。

Spring 需要标准的spring-security-web 和spring-security-config 依赖项来在应用程序中设置安全性。

接下来,我们需要添加一个扩展WebSecurityConfigurerAdapter的类,并使用@EnableWebSecurity进行注释:

@Configuration@EnableWebSecuritypublic class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser(‘user1’) .password(passwordEncoder() .encode(‘user1Pass’)) .authorities( ‘ROLE_USER’); @Override protected void configure(HttpSecurity http) 抛出异常{ http.authorizeRequests() .anyRequest().authenticated() .and() .httpBasic(); } @Bean publicPasswordEncoderpasswordEncoder() { return new BCryptPasswordEncoder();同样,Spring Boot 也需要这些依赖项才能正常工作。但我们只需要定义spring-boot-starter-security 的依赖,它就会自动将所有相关依赖添加到类路径中。

面试官:Spring Boot和Spring有什么区别?

7、 应用引导Application Bootstrap

Spring 中的应用程序引导和Spring Boot 之间的基本区别在于servlet。

Spring 使用web.xml 或SpringServletContainerInitializer 作为其引导入口点。

Spring boot仅使用Servlet 3来启动程序

我们来谈谈Spring Boot

web.xml引导方法

Servlet容器(服务器)读取web.xmlweb.xml中定义的DispatcherServlet。 DispatcherServlet 由容器实例化,并通过读取WEB-INF/{servletName}-servlet.xml 创建WebApplicationContext。最后,DispatcherServlet 注册应用程序上下文中定义的beanservlet。 3+启动方式

容器搜索实现ServletContainerInitializer的类,并执行SpringServletContainerInitializer来查找实现类WebApplicationInitializer的子类。 WebApplicationInitializer 使用XML 或上下文@Configuration 类创建会话。 WebApplicationInitializer 使用之前创建的上下文创建一个DispatcherServlet。我们来谈谈Spring Boot

Spring Boot应用程序的入口点是一个用@SpringBootApplication注释的类:

@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }默认情况下,Spring Boot 使用嵌入式容器来运行应用程序。在这种情况下,Spring Boot 使用public static void main 入口点来启动嵌入式Web 服务器。

此外,它还负责将Servlet、Filter 和ServletContextInitializer bean 从应用程序上下文绑定到嵌入式servlet 容器。

Spring Boot的另一个特性是它会自动扫描Main类的同一个包中的所有类或子包中的组件。

Spring Boot 提供了将其部署为外部容器中的Web 存档的选项。在这种情况下,我们必须扩展SpringBootServletInitializer:

@SpringBootApplicationpublic class Application extends SpringBootServletInitializer { //.} 外部servlet 容器查找Web 存档的META-INF 文件中定义的Main 类。 SpringBootServletInitializer将负责绑定Servlet、Filter和ServletContextInitializer。

8 、打包和部署

最后,我们来看看如何打包和部署应用程序。这两个框架都支持常见的包管理技术,例如Maven 和Gradle。但在部署方面,这些框架差异很大。

例如,Spring Boot Maven 插件在Maven 中提供Spring Boot 支持。它还允许打包可执行jar 或war 存档并“就地”运行应用程序。

与部署环境中的spring 相比,Spring Boot 的一些优点包括

用户评论

面试官:Spring Boot和Spring有什么区别?
无所谓

这个标题好好!最近也在准备面试,不知道Spring Boot和Spring的区别啊,希望能看到详细讲解,感谢分享!

    有9位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
减肥伤身#

Spring Boot真的太方便了,快速构建项目效率很高!感觉Spring基础知识有点重,不太喜欢那种繁琐的配置方式。

    有5位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
堕落爱人!

面试官问这个就意味着要了解Spring框架的历史,从最初的Spring到现在的SpringBoot都是为了解决开发中的问题。 不过很多时候,还是会用到原生的Spring容器搭建一些复杂的功能。

    有19位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
作业是老师的私生子

我个人觉得Spring Boot是Spring的一种高级形态,更加模块化、自动化,方便快速开发。对于新人来说学习Spring可能更累些。

    有15位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
一生只盼一人

虽然SpringBoot简化了配置,但对底层机制的理解还是必要的,不能完全依赖框架。只有真正明白Spring Boot是怎样运作的才能够更好地使用它!

    有5位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
念安я

我面试的时候被人问到了这个问题,当时还挺紧张,只记得SpringBoot比Spring更轻量化、自动配置…结果没好好回答呢!

    有14位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
*巴黎铁塔

确实啊,Spring Boot和Spring之间的区别很微妙,需要好好对比学习才能理解透彻。像启动类,嵌入式服务器等等都是关键的区别点。

    有7位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
站上冰箱当高冷

看标题挺想看的,希望你能把SpringBoot和Spring的优缺点都详细分析一下,这样更容易理解两者之间的关系。

    有7位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
晨与橙与城

我觉得无论用哪个框架都需要掌握基本的Spring核心概念,SpringBoot更像是搭建项目的工具箱,提供了很多预先配置好的模块。

    有5位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
纯真ブ已不复存在

这个区别点真的很难总结!感觉是同一家人不同的成员?哈哈,我还是要多练习才能把两者说清楚。

    有13位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
冷风谷离殇

面试官问这种问题可能想考察你对Spring家族的理解,而不是单纯的知识背诵。需要结合实际项目经验谈谈你的看法和选择理由。

    有6位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
命运不堪浮华

我是个新手,感觉SpringBoot真的很好用啊!希望学习一下Spring,但是看着那些古老的配置文档有点 daunting。

    有16位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
最怕挣扎

对于大型复杂项目的开发来说,可能需要理解Spring底层的原理来更灵活地控制项目结构。SpringBoot虽然强大,但也有局限性哦!

    有12位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
抚涟i

面试官这问题真是经典啊,每次都会考察你对Spring家族的深度理解!建议多阅读文档和实践案例才能真正掌握两者之间的差异。

    有11位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
凝残月

有时候需要结合具体的场景分析究竟应该用SpringBoot还是原生的Spring,没有绝对的答案。 还是要根据项目的规模、复杂度等因素来选择合适的工具!

    有9位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
肆忌

希望有详细的文章解读SpringBoot和Spring的区别,我最近在学习开发,想了解两者之间的差异性。

    有8位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
妄灸

我个人很佩服Spring Boot的团队,把原生的Spring做得更加易用、高效。 学习Spring Boot的代码更容易入门!

    有10位网友表示赞同!

面试官:Spring Boot和Spring有什么区别?
心悸╰つ

感觉面试官问这个题主要想测试你的理解和分析能力,而不是让你死记硬背概念。 只有真正明白不同框架的特点才能做出合适的抉择。

    有13位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/118471.html

(0)
小su's avatar小su
上一篇 2024年9月1日 上午10:44
下一篇 2024年9月1日 上午10:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注