SpringBoot和Spring有什麼區別?
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- *和body有什麼區別
- Cache 和 Buffer 有什麼區別?
- mongodb和mysql有什麼區別MongoDBMySql
- shim和polyfill有什麼區別
- float和double有什麼區別?
- int 和 Integer 有什麼區別
- cookie和session 有什麼區別?CookieSession
- session 和 cookie 有什麼區別?SessionCookie
- modbus和tcp有什麼區別?TCP
- Nginx和Apache有什麼區別?NginxApache
- COOKIE和SESSION有什麼區別?CookieSession
- RegisterClass和RegisterClassEx有什麼區別?
- for update 和 for update of 有什麼區別
- PEAR 和 PECL 有什麼區別?
- Activity和Fragment有什麼區別Fragment
- vue和react有什麼區別?VueReact
- Iterator和ListIterator有什麼區別
- Hifi和ONT 有什麼區別
- cookie是什麼?和session有什麼區別?CookieSession
- IPFS和區塊鏈有什麼區別區塊鏈
- Java和Python是什麼?有什麼區別?JavaPython
- Aliyun Java Initializr 和 Spring 官方的到底有什麼區別?JavaSpring
- RPA和IPA有什麼區別
- Jsp和Servlet有什麼區別?JSServlet
- HTTP和HTTPS有什麼區別?HTTP
- VPS和HTTP有什麼區別?HTTP
- 命令和事件有什麼區別? - Oskar事件
- c++中&和&&有什麼區別C++
- DAO和Repository有什麼區別
- 青蛙和癩蛤蟆有什麼區別
- maven </dependencies>和</dependencyManagement> 有什麼區別Maven
- JMS和AMQP有什麼區別嗎MQ
- 什麼是報表工具?和 EXCEL 有什麼區別?Excel
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 什麼是 MicroPython?和CPython有什麼區別?Python
- 什麼是SCRM系統?和CRM有什麼區別?
- png是什麼格式 png和jpg有什麼區別
- xpgu是什麼 xgpu和xgp有什麼區別GPU