SpringBoot和Spring有什麼區別?

蝴蝶飛啊飛發表於2019-09-23

pring 為開發 Java 程式提供了全面的基礎架構支援,包括依賴注入以及一些開箱即用的模組,大大縮短了程式的開發時間。

Spring JDBC Spring MVC Spring AOP Spring TEST Spring Security Spring ORM

SpringBoot 是一個輕量級的微伺服器,相比 Spring ,它消除了 xml 的配置,嵌入了 Tomcat Jetty Undertow 。儘可能自動的配置 Spring 應用。

SpringBoot 只需要一個依賴項來啟動和執行 Web 應用程式:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    <version>2.0.6.RELEASE</version>

</dependency>

SpringBoot 應用程式的入口是使用 @SpringBootApplication 註釋的類:

@SpringBootApplication

public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);

    }

}

SpringBoot 打成 jar 包也十分方便,因為支援 Maven 的通用包管理技術,打包完後,只需要使用 Java -jar jarname.jar 即可執行

一、Spring 的介紹

    簡而言之, Spring 框架為開發 Java 應用程式提供了全面的基礎架構支援。它包含一些很好的功能,如依賴注入和開箱即用的模組,如:

Spring JDBC

Spring MVC

Spring Security

Spring AOP

Spring ORM

Spring Test

    這些模組可以大大縮短應用程式的開發時間。例如,在 Java Web 開發的早期階段,我們需要編寫大量的重複程式碼來將記錄插入到資料來源中。但是通過使用 Spring JDBC 模組的 JDBCTemplate ,我們可以將它簡化為只需幾個簡單配置或者幾行程式碼。

二、SpringBoot 的介紹

   Spring Boot 基本上是 Spring 框架的擴充套件,它消除了設定 Spring 應用程式所需的複雜例行配置。

    它的目標和 Spring 的目標是一致的,為更快,更高效的開發生態系統鋪平了道路。以下是 Spring Boot 中的一些功能:

通過starter 這一個依賴,以簡化構建和複雜的應用程式配置。

可以直接main 函式啟動,嵌入式 web 伺服器,避免了應用程式部署的複雜性, Metrics 度量, Helth check 健康檢查和外部化配置。

儘可能的自動化配置Spring 功能。

三、Spring SpringBoot 的比較

3.1 Maven 依賴

    首先,讓我們看一下使用 Spring 建立 Web 應用程式所需的最小依賴項:

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-web</artifactId>

    <version>5.1.0.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-webmvc</artifactId>

    <version>5.1.0.RELEASE</version>

</dependency>

    Spring 不同, Spring Boot 只需要一個依賴項來啟動和執行 Web 應用程式:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    <version>2.0.5.RELEASE</version>

</dependency>

    在構建期間,所有其他依賴項將自動新增到最終歸檔中。

   Spring Boot 為不同的 Spring 模組提供了許多入門依賴項。一些最常用的是:

spring-boot-starter-data-jpa

spring-boot-starter-security

spring-boot-starter-test

spring-boot-starter-web

spring-boot-starter-thymeleaf

3.2 MVC 配置

    下面來探討一下使用 Spring Spring Boot 建立 JSP Web 應用程式所需的配置。

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override

    public void onStartup(ServletContext container) {

        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

        context.setConfigLocation("com.test.package");

        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;

   }

}

    與所有這些相比,一旦我們新增了 Spring boot web starter Spring Boot 只需要一些屬性來使上面的事情正常工作:

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

spring.mvc.view.suffix=.jsp

    上面的所有 Spring 配置都是通過一個名為 auto-configuration 的程式新增 Boot web starter 來自動包含的。

    這意味著 Spring Boot 將自動掃描應用程式中存在的依賴項,屬性和 bean ,並根據這些內容啟用相應的配置。

3.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 Boot 只需要 spring-boot-starter-thymeleaf 的依賴項 來啟用 Web 應用程式中的 Thymeleaf 支援。

    一旦依賴關係新增成功後,我們就可以將模板新增到 src / main / resources / templates 資料夾中, Spring Boot 將自動顯示它們。

3.4 安全配置

    為簡單起見,我們將看到如何使用 Spring Spring Boot 框架啟用預設的 HTTP Basic 身份驗證。

    讓我們首先看一下使用 Spring 啟用 Security 所需的依賴關係和配置。

   Spring 需要標準的 spring-security-web spring-security-config 依賴項來在應用程式中設定 Security

    接下來, 我們需要新增一個擴充套件 WebSecurityConfigurerAdapter 的類,並使用 @EnableWebSecurity 註解:

@Configuration

@EnableWebSecurity

public 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) throws Exception {

        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();

    }

    @Bean

    public PasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();

    }

}

    同樣, Spring Boot 也需要這些依賴項才能使其工作。但是我們只需要定義 spring-boot-starter-security 的依賴關係,它會自動將所有相關的依賴項新增到類路徑中。

3.5 應用引導 Application Bootstrap

   Spring Spring Boot 中應用程式引導的基本區別在於 servlet

   Spring 使用 web.xml SpringServletContainerInitializer 作為其引匯入口點。

spring boot 僅僅使用 Servlet 3 來載入程式。

    首先來說說 spring 引導

    方法一: web.xml 引導方法

Servlet 容器(伺服器)讀取 web.xml

web.xml 中定義的 DispatcherServlet 由容器例項化

DispatcherServlet 通過讀取 WEB-INF / {servletName} -servlet.xml 來建立 WebApplicationContext

最後,DispatcherServlet 註冊在應用程式上下文中定義的 bean

    方法二: servlet 3+ 引導方法

容器搜尋實現ServletContainerInitializer 的 類並執行

SpringServletContainerInitializer 找到實現類 WebApplicationInitializer 的子類

WebApplicationInitializer 建立會話使用 XML 或上下文 @Configuration

WebApplicationInitializer 建立 DispatcherServlet ,使用先前建立的上下文。

    再來說說 Spring Boot 引導

   Spring Boot 應用程式的入口點是使用 @SpringBootApplication 註釋的類:

@SpringBootApplication

function(){   //外匯返傭:http://www.fx61.com/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 提供了將其部署為外部容器中的 Web 存檔的選項。在這種情況下,我們必須擴充套件 SpringBootServletInitializer

@SpringBootApplication

public class Application extends SpringBootServletInitializer {

    // ...

}

    外部 Servlet 容器查詢在 Web 歸檔檔案的 META-INF 檔案中定義的 Main-class SpringBootServletInitializer 將負責繫結 Servlet Filter ServletContextInitializer

3.6 打包和部署

    最後,讓我們看看如何打包和部署應用程式。這兩個框架都支援 Maven Gradle 等常見的包管理技術。但是在部署方面,這些框架差異很大。

    例如, Spring Boot Maven 外掛在 Maven 中提供 Spring Boot 支援。它還允許打包可執行 jar war 檔案並“就地”執行應用程式。

    spring 相比,在部署環境中 Spring Boot 的一些優點包括

提供嵌入式容器支援

使用命令java -jar 獨立執行 jar

在外部容器中部署時,可以選擇排除依賴關係以避免潛在的jar 衝突

部署時靈活指定配置檔案的選項

用於整合測試的隨機埠生成

SpringBoot spring 究竟有什麼區別,重點對比 MVC 模組以及 Security 模組在兩大框架使用時的區別。

1. 啥是 spring

簡而言之,Spring 框架為開發 Java 應用程式提供了全面的基礎架構支援。

它包含了一些很好的功能,如依賴注入和開箱即用的模組,如:

Spring JDBC

Spring MVC

Spring Security

Spring AOP

Spring ORM

Spring Test

這些模組可以大大縮短應用程式的開發時間。

例如,在Java Web 開發的早期階段,我們需要編寫大量的重複程式碼來記錄插入到資料來源中。但是通過使用 Spring JDBC

模組的JDBCTemplate ,我們可以將它簡化為只需幾個簡單配置或者幾行程式碼。

2. 啥是 spring boot

Spring Boot 基本是 Spring 框架的擴充套件,它消除了設定 Spring 應用程式所需的複雜例行配置。

它的目標和Spring 的目標是一致的,為更快,更高效的開發生態系統鋪平了道路。

以下是Spring Boot 中的一些功能:

通過starter 這一個依賴,以簡化構建和複雜的應用程式配置。

可以直接main 函式啟動,嵌入式 web 伺服器,避免了應用程式部署的複雜性。

Metrics 度量, Helth check 健康檢查和外部化配置。

自動化配置sping 功能 - 儘可能的。

以下是兩者的區別

3.Maven 依賴

4.MVC 配置

5. 配置模板引擎

6. 安全配置

7. 應用引導 Application Bootstrap

8. 打包和部署

這兩個框架都支援Maven Gradle 等常見的包管理技術。但在部署方面,差異很大。

例如:Spring Boot Maven 外掛在 Maven 中提供 Spring Boot 支援。它還允許打包可執行 jar war 檔案並就地執行應用程式。

spring 相比,在部署環境中 Spring Boot 的一些優點包括:

提供嵌入式容器支援

使用命令java-jar 獨立執行 jar

在外部容器中部署時,可以選擇排除依賴關係以避免潛在的jar 衝突。

配置時靈活指定配置檔案的選項。

用於整合測試的隨機埠生產。

9. 小結

用一句話概述就是:SpringBoot 只是 Spring 本身的擴充套件,使開發,測試和部署更加方便。

10. SpringMVC 區別

Springboot springMVC 的升級版,兩者沒有必然聯絡。 Spring Boot 是伴隨著 Spring4.0 誕生的。

SpringBoot 的特點:

a. 化繁為簡,簡化配置。

b. 備受關注,是下一代框架。

c. 微服務的入門級框架

        微服務是當下比較流行的架構, spring 為微服務提供了一整套元件,稱為 SpringCloud springcloud 是建立在 Spring Boot 的基礎之上的。

d. 使編碼變得簡單,使配置變得簡單,使部署變得簡單,使監控變得簡單。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946279/viewspace-2657919/,如需轉載,請註明出處,否則將追究法律責任。

相關文章