大家好,面试官: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-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 的依赖,它就会自动将所有相关依赖添加到类路径中。
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 的一些优点包括
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/118471.html
用户评论
无所谓
这个标题好好!最近也在准备面试,不知道Spring Boot和Spring的区别啊,希望能看到详细讲解,感谢分享!
有9位网友表示赞同!
减肥伤身#
Spring Boot真的太方便了,快速构建项目效率很高!感觉Spring基础知识有点重,不太喜欢那种繁琐的配置方式。
有5位网友表示赞同!
堕落爱人!
面试官问这个就意味着要了解Spring框架的历史,从最初的Spring到现在的SpringBoot都是为了解决开发中的问题。 不过很多时候,还是会用到原生的Spring容器搭建一些复杂的功能。
有19位网友表示赞同!
作业是老师的私生子
我个人觉得Spring Boot是Spring的一种高级形态,更加模块化、自动化,方便快速开发。对于新人来说学习Spring可能更累些。
有15位网友表示赞同!
一生只盼一人
虽然SpringBoot简化了配置,但对底层机制的理解还是必要的,不能完全依赖框架。只有真正明白Spring Boot是怎样运作的才能够更好地使用它!
有5位网友表示赞同!
念安я
我面试的时候被人问到了这个问题,当时还挺紧张,只记得SpringBoot比Spring更轻量化、自动配置…结果没好好回答呢!
有14位网友表示赞同!
*巴黎铁塔
确实啊,Spring Boot和Spring之间的区别很微妙,需要好好对比学习才能理解透彻。像启动类,嵌入式服务器等等都是关键的区别点。
有7位网友表示赞同!
站上冰箱当高冷
看标题挺想看的,希望你能把SpringBoot和Spring的优缺点都详细分析一下,这样更容易理解两者之间的关系。
有7位网友表示赞同!
晨与橙与城
我觉得无论用哪个框架都需要掌握基本的Spring核心概念,SpringBoot更像是搭建项目的工具箱,提供了很多预先配置好的模块。
有5位网友表示赞同!
纯真ブ已不复存在
这个区别点真的很难总结!感觉是同一家人不同的成员?哈哈,我还是要多练习才能把两者说清楚。
有13位网友表示赞同!
冷风谷离殇
面试官问这种问题可能想考察你对Spring家族的理解,而不是单纯的知识背诵。需要结合实际项目经验谈谈你的看法和选择理由。
有6位网友表示赞同!
命运不堪浮华
我是个新手,感觉SpringBoot真的很好用啊!希望学习一下Spring,但是看着那些古老的配置文档有点 daunting。
有16位网友表示赞同!
最怕挣扎
对于大型复杂项目的开发来说,可能需要理解Spring底层的原理来更灵活地控制项目结构。SpringBoot虽然强大,但也有局限性哦!
有12位网友表示赞同!
抚涟i
面试官这问题真是经典啊,每次都会考察你对Spring家族的深度理解!建议多阅读文档和实践案例才能真正掌握两者之间的差异。
有11位网友表示赞同!
凝残月
有时候需要结合具体的场景分析究竟应该用SpringBoot还是原生的Spring,没有绝对的答案。 还是要根据项目的规模、复杂度等因素来选择合适的工具!
有9位网友表示赞同!
肆忌
希望有详细的文章解读SpringBoot和Spring的区别,我最近在学习开发,想了解两者之间的差异性。
有8位网友表示赞同!
妄灸
我个人很佩服Spring Boot的团队,把原生的Spring做得更加易用、高效。 学习Spring Boot的代码更容易入门!
有10位网友表示赞同!
心悸╰つ
感觉面试官问这个题主要想测试你的理解和分析能力,而不是让你死记硬背概念。 只有真正明白不同框架的特点才能做出合适的抉择。
有13位网友表示赞同!