使用Spring MSpring进行许可是一种非常流行的基于Java的框架,用于构建Web和企业应用程序。 与许多其他只关注一个领域的框架不同,Spring框架通过其投资组合项目提供了广泛的功能来满足现代业务需求。

Spring框架提供了以多种方式(例如XMLAnnotationsJavaConfig)配置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 EntityManagerFactoryJpaTransactionManager定义的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 ,静态ResourceHandlersMessageSource等。

@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配置
  • 通过注册TemplateResolverSpringTemplateEngineThymeleafViewResolver 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中下载并配置服务器,例如TomcatJettyWildfly等。

您可以下载Tomcat 8并在您喜欢的IDE中进行配置,运行该应用程序,然后将浏览器指向http:// localhost:8080 / springmvcjpa-demo 。 您应该在表中看到用户详细信息列表。 是的...我们做到了。

但是,等等。仅显示从数据库表中提取的用户详细信息列表是否不是一项太多的工作? 让我们诚实和公平。 所有这些配置不仅仅针对这一用例。 此配置也是其余应用程序的基础。

但是同样,如果您想快速启动并运行,这是太多的工作要做。 另一个问题是,假设您要开发具有类似技术堆栈的另一个SpringMVC应用程序?

好了,您复制粘贴配置并进行调整。 对? 但是请记住一件事:如果您必须一次又一次地执行相同的操作,则应该找到一种自动的方法来执行此操作。

除了一次又一次地写相同的配置之外,您在这里是否还遇到其他问题?

好吧,让我列出我们在这里看到的问题。

  • 您需要寻找特定Spring版本的所有兼容库并进行配置。
  • 95%的时间中,我们以相同的方式配置DataSourceEntitymanagerFactoryTransactionManager等bean。 如果Spring可以自动为我完成任务,那不是很好。
  • 同样,我们通常以相同的方式配置SpringMVC bean,例如ViewResolverMessageSource等。

如果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.javaHomeController.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-apitomcat)时提取所有常用的库。
  • 我们添加了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,但是会自动创建它们。 如果我们在类路径中有任何内存数据库驱动程序(例如H2HSQL) ,则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?相关推荐

  1. SpringBoot AutoConfiguration魔术如何工作?

    在我以前的文章中, 为什么选择SpringBoot? 我们已经研究了如何创建SpringBoot应用程序. 但是您可能会也可能不会了解幕后发生的事情. 您可能想了解SpringBoot自动配置背后的魔 ...

  2. 石化总部java面试题_中国石化面试经验

    面试过程: 首先,上午进行面试人员签到,大约100人左右.一共要2个人.下午1点半开始统一面试.人员较多,所以每个人只有3分钟时间,一共最少8位面试官.过程中,他们很少提问题,如果你的技术比较新颖,会 ...

  3. 美的美少年暑期实习面经

    1. 自我介绍   (国际惯例) 2. 针对自己做的项目进行提问,问了好几个问题. 比如技术选型,为什么选择SpringBoot. redis这些技术栈.redis热点数据等(问的不深) 3. 讲讲集 ...

  4. 自己总结Spring全家桶面试题(3)

    Spring全家桶 一,spring 1,什莫是spring框架,使⽤有什么好处 ,谈谈你对Spring的理解 Spring是一个轻量级的java开发框架.简化了企业应用开发.Spring的出现是为了 ...

  5. 跟我学Springboot开发后端管理系统2:Mybatis-Plus实战

    在Matrix-Web项目中使用Mybatis-Plus作为操作数据库的ORM框架.在市面上常用的ORM框架有hibernetes.mybatis.JPA等,那么为什么选择Mybatis-Plus呢? ...

  6. java后台如何实现让用户可以在页面修改数据表_长见识了,Kotlin + SpringBoot + JPA 整合开发比Java更爽......

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:ride segmentfault.com/a/119 ...

  7. json web token没有哪个成分_【分享项目】给你看看我们公司的登录认证是怎么做的?!(SpringBoot+Shiro+Token+Redis)...

    背景交代 以前项目中权限认证没有使用安全框架,都是在自定义filter中判断是否登录以及用户是否有操作权限的.最近开了新项目,搭架子时,想到使用安全框架来解决认证问题,spring security太 ...

  8. springboot 禁用tomcat_Spring Boot 面试的十个问题

    点击左上角蓝字,关注"SpringForAll社区" 专注分享Spring周边技术内容 用下面这些常见的面试问题为下一次 Spring Boot 面试做准备. 在本文中,我们将讨论 ...

  9. JeecgBoot 2.4 微服务正式版发布,基于SpringBoot的低代码平台

    项目介绍 JeecgBoot 是一款基于代码生成器的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Sh ...

最新文章

  1. 删除Openstack所有组件
  2. 数据快传对于企业的重要性!
  3. 【iCore组合式双核心开发板教程】【快速使用手册】
  4. jsp中文件下载的实现
  5. html中单选多选怎么写,HTML中select标签单选多选用法详解
  6. 【MySQL】MySQL出现Waiting for table metadata lock的原因、解决方法
  7. 计算机组成实验v代表什么,2014计算机组成原理实验指导V1.3.docx
  8. 按比例算出成绩 用c语言,Excel按指定比例生成学生总分,并迭代计算出各学科分数...
  9. 解决vue项目在ie浏览器缓存问题。
  10. 服务器安装nvidia驱动_无法安装最新版NVIDIA显卡驱动,从技术角度该怎么办?
  11. Linux环境下如何编译C++程序
  12. 如何在网页中播放FLV文件的代码
  13. 删除win7系统100M隐藏分区
  14. android手机更改手机密码,重要提醒:手机这个密码一定要改!
  15. poi操作word替换文本框里的内容
  16. [IOS]从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld
  17. 网宿cdn api 刷新缓存函数
  18. win10老是弹出安全登录框
  19. 有关《家》的经典歌曲_浅谈艺术歌曲《家》的演唱
  20. GetKeyState

热门文章

  1. java提高篇之详解内部类
  2. 01)自学JavaScript
  3. 顺序表基本操作在主函数中的实现
  4. 最全三大框架整合(使用映射)——Emp.hbm.xml
  5. 2016蓝桥杯省赛---java---B---7(剪邮票)
  6. excel如何生成mysql的sql语句_excel 批量生成SQL语句
  7. 怎么用php配合js编写动态页面_JavaScript_JavaScript教程:用JS脚本实现Web页面信息交互范例,要实现动态交互,必须掌握有 - phpStudy...
  8. 如何设置电脑自动锁屏_这个手机锁屏密码竟可以根据时间而变化!密码每分钟都会发生改变...
  9. 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)
  10. java集合——集合框架