javascript
为什么选择SpringBoot?
使用Spring MSpring進行許可是一種非常流行的基于Java的框架,用于構建Web和企業應用程序。 與許多其他只關注一個領域的框架不同,Spring框架通過其投資組合項目提供了廣泛的功能來滿足現代業務需求。
Spring框架提供了以多種方式(例如XML , Annotations和JavaConfig)配置bean的靈活性。 隨著功能數量的增加,復雜性也隨之增加,配置Spring應用程序變得繁瑣且容易出錯。
Spring團隊創建了SpringBoot來解決配置的復雜性。 但是在深入探討SpringBoot之前,我們將快速了解一下Spring框架,并了解SpringBoot試圖解決什么樣的問題。
在本文中,我們將介紹:
- Spring框架概述
- 使用Spring MVC和JPA(Hibernate)的Web應用程序
- 快速了解SpringBoot
Spring框架概述
如果您是Java開發人員,那么您很有可能聽說過Spring框架,并且很可能已在項目中使用了它。 Spring框架主要是作為依賴關系注入容器創建的,但不僅如此。
春天之所以流行,有幾個原因:
- Spring的依賴注入方法鼓勵編寫可測試的代碼
- 易于使用,但功能強大的數據庫事務管理功能
- Spring簡化了與其他Java框架(如JPA / Hibernate ORM,Struts / JSF等Web框架)的集成。
- 用于構建Web應用程序的最新Web MVC框架
與Spring框架一起,還有許多其他Spring姐妹項目,這些項目有助于構建滿足現代業務需求的應用程序:
- Spring Data:簡化了從關系和NoSQL數據存儲的數據訪問。
- Spring Batch:提供了強大的批處理框架。
- Spring Security:強大的安全框架,可保護應用程序。
- Spring Social:支持與Facebook,Twitter,LinkedIn,GitHub等社交網站的集成。
- Spring集成:企業集成模式的實現,以促進使用輕量級消息傳遞和聲明性適配器與其他企業應用程序集成。
還有許多其他有趣的項目可以滿足其他各種現代應用程序開發需求。 有關更多信息,請訪問http://spring.io/projects 。
最初,Spring框架提供了用于配置bean的基于XML的方法。 后來,Spring引入了用于配置bean的基于XML的DSL,注釋和基于JavaConfig的方法。
讓我們快速看一下每種配置樣式的外觀。
基于XML的配置
<bean id="userService" class="com.sivalabs.myapp.service.UserService"><property name="userDao" ref="userDao"/> </bean><bean id="userDao" class="com.sivalabs.myapp.dao.JdbcUserDao"><property name="dataSource" ref="dataSource"/> </bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="secret"/> </bean>基于注釋的配置
@Service public class UserService {private UserDao userDao;@Autowiredpublic UserService(UserDao dao){this.userDao = dao;}...... }@Repository public class JdbcUserDao {private DataSource dataSource;@Autowiredpublic JdbcUserDao(DataSource dataSource){this.dataSource = dataSource;}...... }基于JavaConfig的配置
@Configuration public class AppConfig {@Beanpublic UserService userService(UserDao dao){return new UserService(dao);}@Beanpublic UserDao userDao(DataSource dataSource){return new JdbcUserDao(dataSource);}@Beanpublic DataSource dataSource(){BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/test");dataSource.setUsername("root");dataSource.setPassword("secret");return dataSource;} }哇……Spring提供了許多用于完成同一任務的方法,我們甚至可以混合使用這些方法,就像可以在同一應用程序中同時使用基于JavaConfig和基于注釋的配置樣式一樣。
那是很大的靈活性,它是一種好方法,一種是壞的方法。 剛接觸Spring框架的人可能會感到困惑
關于采用哪種方法。 到目前為止,Spring團隊建議遵循基于JavaConfig的方法,因為它可以提供更大的靈活性。
但是,沒有一種千篇一律的解決方案。 必須根據自己的應用程序需求選擇方法。
好的,現在您可以大致了解一下各種樣式的Spring bean配置。
讓我們快速看一下典型的SpringMVC + JPA / Hibernate Web應用程序配置的配置。
使用Spring MVC和JPA(Hibernate)的Web應用程序
在了解什么是SpringBoot及其提供的功能之前,讓我們看一下典型的Spring Web應用程序配置的外觀,痛點是什么,然后我們將討論SpringBoot如何解決這些問題。
步驟1:配置Maven依賴項
我們需要做的第一件事是配置pom.xml中所需的所有依賴項。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sivalabs</groupId><artifactId>springmvc-jpa-demo</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>springmvc-jpa-demo</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> <failOnMissingWebXml>false</failOnMissingWebXml></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.9.2.RELEASE</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.13</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.13</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.13</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.190</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.3.11.Final</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring4</artifactId><version>2.1.4.RELEASE</version></dependency></dependencies> </project>我們已經將所有Maven jar依賴項配置為包括Spring MVC,Spring Data JPA,JPA / Hibernate,Thymeleaf和Log4j。
步驟2:使用JavaConfig配置服務/ DAO層bean。
@Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages="com.sivalabs.demo") @PropertySource(value = { "classpath:application.properties" }) public class AppConfig {@Autowiredprivate Environment env;@Beanpublic static PropertySourcesPlaceholderConfigurer placeHolderConfigurer(){return new PropertySourcesPlaceholderConfigurer();}@Value("${init-db:false}")private String initDatabase;@Beanpublic PlatformTransactionManager transactionManager(){EntityManagerFactory factory = entityManagerFactory().getObject();return new JpaTransactionManager(factory);}@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory(){LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();vendorAdapter.setGenerateDdl(Boolean.TRUE);vendorAdapter.setShowSql(Boolean.TRUE);factory.setDataSource(dataSource());factory.setJpaVendorAdapter(vendorAdapter);factory.setPackagesToScan("com.sivalabs.demo");Properties jpaProperties = new Properties();jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));factory.setJpaProperties(jpaProperties);factory.afterPropertiesSet();factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());return factory;}@Beanpublic HibernateExceptionTranslator hibernateExceptionTranslator(){return new HibernateExceptionTranslator();}@Beanpublic DataSource dataSource(){BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));dataSource.setUrl(env.getProperty("jdbc.url"));dataSource.setUsername(env.getProperty("jdbc.username"));dataSource.setPassword(env.getProperty("jdbc.password"));return dataSource;}@Beanpublic DataSourceInitializer dataSourceInitializer(DataSource dataSource) {DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();dataSourceInitializer.setDataSource(dataSource);ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();databasePopulator.addScript(new ClassPathResource("data.sql"));dataSourceInitializer.setDatabasePopulator(databasePopulator);dataSourceInitializer.setEnabled(Boolean.parseBoolean(initDatabase));return dataSourceInitializer;} }在AppConfig.java配置類中,我們執行了以下操作:
- 使用@Configuration批注將其標記為Spring Configuration類。
- 使用@EnableTransactionManagement啟用基于注釋的事務管理
- 已配置@EnableJpaRepositories以指示在何處查找Spring Data JPA存儲庫
- 使用@PropertySource批注和PropertySourcesPlaceholderConfigurer Bean定義配置的PropertyPlaceHolder Bean,該定義從application.properties文件加載屬性。
- 為DataSource ,JPA EntityManagerFactory , JpaTransactionManager定義的bean。
- 配置的DataSourceInitializer bean通過在應用程序啟動時執行data.sql腳本來初始化數據庫。
我們需要在application.properties中配置屬性占位符值,如下所示:
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test jdbc.username=root jdbc.password=admin init-db=true hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.hbm2ddl.auto=update我們可以創建一個簡單的sql腳本data.sql,以將示例數據填充到USER表中。
delete from user; insert into user(id, name) values(1,'Siva'); insert into user(id, name) values(2,'Prasad'); insert into user(id, name) values(3,'Reddy');我們可以使用以下基本配置創建log4j.properties文件:
log4j.rootCategory=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p %t %c{2}:%L - %m%nlog4j.category.org.springframework=INFO log4j.category.com.sivalabs=DEBUG步驟3:配置Spring MVC Web層bean
我們將必須為i18n配置Thymeleaf ViewResolver ,靜態ResourceHandlers , MessageSource等。
@Configuration @ComponentScan(basePackages = { "com.sivalabs.demo"}) @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter {@Beanpublic TemplateResolver templateResolver() {TemplateResolver templateResolver = new ServletContextTemplateResolver();templateResolver.setPrefix("/WEB-INF/views/");templateResolver.setSuffix(".html");templateResolver.setTemplateMode("HTML5");templateResolver.setCacheable(false);return templateResolver;}@Beanpublic SpringTemplateEngine templateEngine() {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver());return templateEngine;}@Beanpublic ThymeleafViewResolver viewResolver() {ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();thymeleafViewResolver.setTemplateEngine(templateEngine());thymeleafViewResolver.setCharacterEncoding("UTF-8");return thymeleafViewResolver;}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry){registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){configurer.enable();}@Bean(name = "messageSource")public MessageSource configureMessageSource(){ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();messageSource.setBasename("classpath:messages");messageSource.setCacheSeconds(5);messageSource.setDefaultEncoding("UTF-8");return messageSource;} }在我們的WebMvcConfig.java配置類中,我們執行了以下操作:
- 使用@Configuration批注將其標記為Spring Configuration類。
- 使用@EnableWebMvc啟用基于注釋的Spring MVC配置
- 通過注冊TemplateResolver , SpringTemplateEngine , ThymeleafViewResolver bean配置Thymeleaf ViewResolver。
- 已注冊的ResourceHandlers Bean將指示從/ resources /目錄提供對URI / resources / **的靜態資源的請求。
- 已配置的MessageSource bean可以從類路徑的ResourceBundle 消息-{country-code} .properties中加載i18n消息。
目前,我們沒有任何消息要配置,因此在src / main / resources文件夾中創建一個空的messages.properties文件。
步驟4:注冊Spring MVC FrontController servlet DispatcherServlet。
在Servlet 3.x規范之前,我們必須在web.xml中注冊Servlet / Filters。 從Servlet 3.x規范開始,我們可以使用ServletContainerInitializer以編程方式注冊Servlet /過濾器。
Spring MVC提供了一個方便的類AbstractAnnotationConfigDispatcherServletInitializer來注冊DispatcherServlet 。
public class SpringWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses(){return new Class<?>[] { AppConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses(){return new Class<?>[] { WebMvcConfig.class };}@Overrideprotected String[] getServletMappings(){return new String[] { "/" };}@Overrideprotected Filter[] getServletFilters() {return new Filter[]{ new OpenEntityManagerInViewFilter() };} }在我們的SpringWebAppInitializer.java配置類中,我們執行了以下操作:
- 我們已經將AppConfig.class配置為RootConfirationClasses ,它將成為父ApplicationContext ,其中包含由所有子( DispatcherServlet )上下文共享的bean定義。
- 我們已經將WebMvcConfig.class配置為ServletConfigClasses ,它是包含WebMvc bean定義的子ApplicationContext 。
- 我們已經將“ /”配置為ServletMapping,這意味著所有請求都將由DispatcherServlet處理。
- 我們已經將OpenEntityManagerInViewFilter注冊為Servlet過濾器,以便在呈現視圖時可以延遲加載JPA Entity延遲集合。
第5步:創建一個JPA實體和Spring Data JPA存儲庫
為用戶實體創建一個JPA實體User.java和一個Spring Data JPA存儲庫。
@Entity public class User {@Id @GeneratedValue(strategy=GenerationType.AUTO)private Integer id;private String name;//setters and getters }public interface UserRepository extends JpaRepository<User, Integer> { }步驟6:創建一個SpringMVC控制器
創建一個SpringMVC控制器來處理URL “ /”并呈現用戶列表。
@Controller public class HomeController {@Autowired UserRepository userRepo;@RequestMapping("/")public String home(Model model){model.addAttribute("users", userRepo.findAll());return "index";} }步驟7:創建一個百里香葉視圖/WEB-INF/views/index.html呈現用戶列表。
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"/> <title>Home</title> </head> <body><table><thead><tr><th>Id</th><th>Name</th></tr></thead><tbody><tr th:each="user : ${users}"><td th:text="${user.id}">Id</td><td th:text="${user.name}">Name</td></tr></tbody></table> </body> </html>現在我們已經準備好運行該應用程序。 但是在此之前,我們需要在IDE中下載并配置服務器,例如Tomcat , Jetty或Wildfly等。
您可以下載Tomcat 8并在您喜歡的IDE中進行配置,運行該應用程序,然后將瀏覽器指向http:// localhost:8080 / springmvcjpa-demo 。 您應該在表中看到用戶詳細信息列表。 是的...我們做到了。
但是,等等。僅顯示從數據庫表中提取的用戶詳細信息列表是否不是一項太多的工作? 讓我們誠實和公平。 所有這些配置不僅僅針對這一用例。 此配置也是其余應用程序的基礎。
但是同樣,如果您想快速啟動并運行,這是太多的工作要做。 另一個問題是,假設您要開發具有類似技術堆棧的另一個SpringMVC應用程序?
好了,您復制粘貼配置并進行調整。 對? 但是請記住一件事:如果您必須一次又一次地執行相同的操作,則應該找到一種自動的方法來執行此操作。
除了一次又一次地寫相同的配置之外,您在這里是否還遇到其他問題?
好吧,讓我列出我們在這里看到的問題。
- 您需要尋找特定Spring版本的所有兼容庫并進行配置。
- 95%的時間中,我們以相同的方式配置DataSource , EntitymanagerFactory , TransactionManager等bean。 如果Spring可以自動為我完成任務,那不是很好。
- 同樣,我們通常以相同的方式配置SpringMVC bean,例如ViewResolver , MessageSource等。
如果Spring可以自動為我完成任務,那就太好了!!!
想象一下,如果Spring能夠自動配置bean呢? 如果可以使用簡單的可自定義屬性自定義自動配置怎么辦?
例如,您不想將DispatcherServlet url-pattern映射到“ /”,而是將其映射到“ / app /”。 與其將百里香葉視圖放置在“ / WEB-INF / views”文件夾中,不如將它們放置在“ / WEB-INF / templates /”文件夾中。
因此,基本上,您希望Spring自動執行操作,但是提供了以更簡單的方式覆蓋默認配置的靈活性?
好吧,您即將進入SpringBoot的世界,夢想成真!
快速了解SpringBoot
歡迎使用SpringBoot! SpringBoot確實可以滿足您的需求。 它會自動為您執行操作,但如果需要,您可以覆蓋默認值。
與其從理論上解釋,不如說我以身作則。
因此,讓我們實現與之前構建的應用程序相同的應用程序,但是這次使用SpringBoot。
步驟1:創建一個基于Maven的SpringBoot項目
創建一個Maven項目并按如下方式配置依賴項:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sivalabs</groupId><artifactId>hello-springboot</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>hello-springboot</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.2.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies> </project>哇,我們的pom.xml突然變得很小!
步驟2:按如下所示在application.properties中配置數據源/ JPA屬性。
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=admin spring.datasource.initialize=true spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true您可以將相同的data.sql文件復制到src / main / resources文件夾中。
步驟3:為該實體創建JPA實體和Spring Data JPA存儲庫接口。
創建與springmvc-jpa-demo應用程序相同的User.java,UserRepository.java和HomeController.java 。
步驟4:創建Thymeleaf視圖以顯示用戶列表
將我們在springmvc-jpa-demo應用程序中創建的/WEB-INF/views/index.html復制到新項目的src / -main / resources / templates文件夾中。
步驟5:創建SpringBoot EntryPoint類。
使用以下主要方法創建一個Java類Application.java :
@SpringBootApplication public class Application {public static void main(String[] args){SpringApplication.run(Application.class, args);} }現在將Application.java作為Java應用程序運行,并將瀏覽器指向http:// localhost:8080 / 。 您應該以表格格式看到用戶列表。 酷!
好吧好吧,我聽到你在喊“發生了什么事??”。
讓我解釋一下發生了什么。
1.輕松的依賴管理
- 首先要觀察的是,我們正在使用一些名為spring-boot-starter- *的依賴項。
記住我說過“ 95%的時間我使用相同的配置”。 因此,默認情況下,當您添加springboot-starter-web依賴項時,它將在開發Spring MVC應用程序(例如spring-webmvc,jackson-json,validation-api和tomcat)時提取所有常用的庫。 - 我們添加了spring-boot-starter-data-jpa依賴性。 這拉動了所有spring-data-jpa依賴關系,并添加了Hibernate庫,因為大多數應用程序都將Hibernate作為JPA實現。
2.自動配置
- 不僅spring-boot-starter-web添加了所有這些庫,而且還使用合理的默認值配置了常用注冊的bean,例如DispatcherServlet,ResourceHandlers,MessageSource等bean。
- 我們還添加了spring-boot-starter-thymeleaf ,它不僅添加了thymeleaf庫依賴關系,而且還自動配置了ThymeleafViewResolver bean。
- 我們尚未定義任何DataSource,EntityManagerFactory,TransactionManager等bean,但是會自動創建它們。 如果我們在類路徑中有任何內存數據庫驅動程序(例如H2或HSQL) ,則SpringBoot將自動創建內存數據源 ,然后使用合理的默認值自動注冊EntityManagerFactory和TransactionManager bean,但我們使用的是MySQL,因此我們需要明確提供MySQL連接詳細信息。 我們已經在application.properties文件中配置了這些MySQL連接詳細信息,并且SpringBoot使用這些屬性創建了一個DataSource 。
3.嵌入式Servlet容器支持
最重要和令人驚訝的事情是我們創建了一個簡單的Java類,并帶有一些神奇的注釋
@SpringApplication有一個main方法,通過運行該main方法,我們可以運行該應用程序并在以下位置訪問它
http:// localhost:8080 / 。
Servlet容器來自哪里?
我們添加了spring-boot-starter-web ,它會自動拉出spring-boot-starter-tomcat ,當我們運行main()方法時,它會將tomcat作為嵌入式容器啟動,因此我們不必在任何應用程序上部署應用程序外部安裝的tomcat服務器。
順便提一下,您觀察到我們在pom.xml中的打包類型是'jar'而不是'war' 。 精彩!
好的,但是如果我想使用Jetty服務器而不是tomcat怎么辦?
很簡單,從spring-boot-starter-web中排除spring-bootstarter-tomcat ,并包含spring-boot-starter-jetty 。
而已。 但是,這看起來很神奇!!!
我可以想象你在想什么。 您在想,SpringBoot看起來很酷,它會自動為我做很多事情。 但是我仍然不完全了解它在幕后的運作方式。 對?
我能夠了解。 觀看魔術表演通常很有趣,但是在軟件開發中卻不是。 不用擔心,我們將在以后的文章中仔細研究每件事,并詳細解釋幕后情況。 但是,我不想在本文中將所有內容轉儲到您的耳中而使您不知所措。
摘要
在本文中,我們快速瀏覽了各種Spring配置樣式,并了解了配置Spring應用程序的復雜性。 另外,我們通過創建一個簡單的Web應用程序快速瀏覽了SpringBoot。 在下一篇文章中,我們將深入研究SpringBoot并了解其工作原理。
翻譯自: https://www.javacodegeeks.com/2016/03/why-springboot.html
總結
以上是生活随笔為你收集整理的为什么选择SpringBoot?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么做批注 如何做批注
- 下一篇: gradle idea java ssm