Spring Boot 和 Spring 到底有啥区别?,给后辈的一点建议

org.springframework

spring-web

5.1.0.RELEASE

org.springframework

spring-webmvc

5.1.0.RELEASE

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

org.springframework.boot

spring-boot-starter-web

2.0.6.RELEASE

在进行构建期间,所有其他依赖项将自动添加到项目中。

另一个很好的例子就是测试库。我们通常使用Spring Test,JUnit,Hamcrest和Mockito库。在Spring项目中,我们应该将所有这些库添加为依赖项。但是在Spring Boot中,我们只需要添加spring-boot-starter-test依赖项来自动包含这些库。

Spring Boot为不同的Spring模块提供了许多依赖项。

一些最常用的是:

spring-boot-starter-data-jpa

spring-boot-starter-security

spring-boot-starter-test

spring-boot-starter-web

spring-boot-starter-thymeleaf

2、MVC配置


让我们来看一下Spring和Spring Boot创建JSP Web应用程序所需的配置。

Spring需要定义调度程序servlet,映射和其他支持配置。我们可以使用 web.xml 文件或Initializer类来完成此操作:

public class MyWebAppInitializer implements WebApplicationInitializer {

@Override

public void onStartup(ServletContext container) {

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

context.setConfigLocation(“com.pingfangushi”);

container.addListener(new ContextLoaderListener(context));

ServletRegistration.Dynamic dispatcher = container

.addServlet(“dispatcher”, new DispatcherServlet(context));

dispatcher.setLoadOnStartup(1);

dispatcher.addMapping("/");

}

}

还需要将@EnableWebMvc注释添加到@Configuration类,并定义一个视图解析器来解析从控制器返回的视图:

@EnableWebMvc

@Configuration

public class ClientWebConfig implements WebMvcConfigurer {

@Bean

public ViewResolver viewResolver() {

InternalResourceViewResolver bean

= new InternalResourceViewResolver();

bean.setViewClass(JstlView.class);

bean.setPrefix("/WEB-INF/view/");

bean.setSuffix(".jsp");

return bean;

}

}

再来看SpringBoot一旦我们添加了Web启动程序,Spring Boot只需要在application配置文件中配置几个属性来完成如上操作:

spring.mvc.view.prefix=/WEB-INF/jsp/

spring.mvc.view.suffix=.jsp

上面的所有Spring配置都是通过一个名为auto-configuration的过程添加Boot web starter来自动包含的。

这意味着Spring Boot将查看应用程序中存在的依赖项,属性和bean,并根据这些依赖项,对属性和bean进行配置。当然,如果我们想要添加自己的自定义配置,那么Spring Boot自动配置将会退回。

3、配置模板引擎


现在我们来看下如何在Spring和Spring Boot中配置Thymeleaf模板引擎。

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

@Configuration

@EnableWebMvc

public class MvcWebConfig implements WebMvcConfigurer {

@Autowired

private ApplicationContext applicationContext;

@Bean

public SpringResourceTemplateResolver templateResolver() {

SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();

templateResolver.setApplicationContext(applicationContext);

templateResolver.setPrefix("/WEB-INF/views/");

templateResolver.setSuffix(".html");

return templateResolver;

}

@Bean

public SpringTemplateEngine templateEngine() {

SpringTemplateEngine templateEngine = new SpringTemplateEngine();

templateEngine.setTemplateResolver(templateResolver());

templateEngine.setEnableSpringELCompiler(true);

return templateEngine;

}

@Override

public void configureViewResolvers(ViewResolverRegistry registry) {

ThymeleafViewResolver resolver = new ThymeleafViewResolver();

resolver.setTemplateEngine(templateEngine());

registry.viewResolver(resolver);

}

}

Spring Boot1X只需要spring-boot-starter-thymeleaf的依赖项来启用Web应用程序中的Thymeleaf支持。

但是由于Thymeleaf3.0中的新功能,我们必须将thymeleaf-layout-dialect 添加为SpringBoot2XWeb应用程序中的依赖项。配置好依赖,我们就可以将模板添加到src/main/resources/templates文件夹中,Spring Boot将自动显示它们。

需要更多大厂面试资料的话也可以点击直接进入,免费获取!暗号:CSDN

4、Spring Security 配置


为简单起见,我们使用框架默认的HTTP Basic身份验证。让我们首先看一下使用Spring启用Security所需的依赖关系和配置。

Spring首先需要依赖spring-security-web和spring-security-config模块。接下来, 我们需要添加一个扩展WebSecurityConfigurerAdapter的类,并使用@EnableWebSecurity注解:

@Configuration

@EnableWebSecurity

public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

@Autowired

public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth.inMemoryAuthentication()

.withUser(“admin”)

.password(passwordEncoder()

.encode(“password”))

.authorities(“ROLE_ADMIN”);

}

@Override

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests()

.anyRequest().authenticated()

.and()

.httpBasic();

}

@Bean

public PasswordEncoder passwordEncoder() {

return new BCryptPasswordEncoder();

}

}

这里我们使用inMemoryAuthentication来设置身份验证。同样,Spring Boot也需要这些依赖项才能使其工作。但是我们只需要定义spring-boot-starter-security的依赖关系,因为这会自动将所有相关的依赖项添加到类路径中。

应用程序启动引导配置


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

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

Spring Boot仅使用Servlet 3功能来引导应用程序,下面让我们详细来了解下

1、Spring 引导配置


Spring支持传统的web.xml引导方式以及最新的Servlet 3+方法。

配置web.xml方法启动的步骤

1)Servlet容器(服务器)读取web.xml;

2)web.xml中定义的DispatcherServlet由容器实例化;

3)DispatcherServlet通过读取WEB-INF / {servletName} -servlet.xml来创建WebApplicationContext。

最后,DispatcherServlet注册在应用程序上下文中定义的bean。

使用Servlet 3+方法的Spring启动步骤

容器搜索实现ServletContainerInitializer的类并执行SpringServletContainerInitializer找到实现所有类WebApplicationInitializer。

WebApplicationInitializer创建具有XML或者上下文@Configuration类WebApplicationInitializer创建DispatcherServlet与先前创建的上下文。

2、SpringBoot 引导配置


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

@SpringBootApplication

public 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提供了将其部署到外部容器的方式。我们只需要扩展SpringBootServletInitializer即可:
Java.png
(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提供了将其部署到外部容器的方式。我们只需要扩展SpringBootServletInitializer即可:
[外链图片转存中…(img-EwlFsBEH-1635179199124)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值