来看看Spring与Spring boot到底有哪些区别
什么是Spring Boot?而且,什么是Spring框架?他们的目标是什么?我们如何比较它们?您的脑海中肯定有很多问题。在此博客的结尾,您将获得所有这些问题的答案。在学习更多有关Spring和Spring Boot框架的知识时,您将了解到每种解决方案都可以解决不同类型的问题。
什么是春天?Spring解决的核心问题是什么?
Spring框架是Java最受欢迎的应用程序开发框架之一。Spring的最佳功能之一是它具有 依赖注入(DI) 或控制反转(IOC), 这使我们能够开发松耦合的应用程序。而且,松耦合的应用程序可以轻松地进行单元测试。
没有依赖注入的示例
考虑下面的示例- MyController 取决于 MyService 执行特定任务。因此,要获取MyService的实例,我们将使用:
MyService service = new MyService();
现在,我们为创建了实例 MyService ,我们看到两者紧密耦合。如果MyService 在的单元测试中 创建的模拟 MyController ,如何 MyController 使用该模拟?有点困难-是吗?
@RestController
public class MyController {
private MyService service = new MyService();
@RequestMapping("/welcome")
public String welcome() {
return service.retrieveWelcomeMessage();
}
}
依赖注入的示例
仅需两个注释,我们就可以MyService 轻松获得实例,而实例 并不是紧密耦合的。Spring框架做了所有艰苦的工作,使事情变得更简单。
-
@Component 在Spring Framework中只是简单地用作 需要在自己的BeanFactory(Factory模式的实现)中进行管理的bean。
-
@Autowired 在Spring Framework中仅用于习惯找到该特定类型的正确匹配并自动装配。
因此,Spring框架将为其创建一个bean MyService 并将其自动连接到中 MyController。
在单元测试中,我可以要求Spring框架将的模拟自动关联 MyService 到 MyController 。
@Component
public class MyService {
public String retrieveWelcomeMessage(){
return "Welcome to InnovationM";
}
}
@RestController
public class MyController {
@Autowired
private MyService service;
@RequestMapping("/welcome")
public String welcome() {
return service.retrieveWelcomeMessage();
}
}
Spring框架还有许多其他功能,分为二十个模块以解决许多常见问题。以下是一些比较流行的模块:
-
Spring JDBC
-
春季MVC
-
春季AOP
-
春季ORM
-
春季JMS
-
春季测试
-
春季表达语言(SpEL)
面向方面的编程(AOP)是Spring框架的另一个优势。面向对象编程中的关键单元是类,而在AOP中,关键单元是方面。例如,如果要在项目,日志记录等中添加安全性,则可以仅使用AOP并将其作为跨领域的关注点而与主要业务逻辑分开。您可以在方法调用之后,方法调用之前,方法返回之后或异常发生之后执行任何操作。
Spring框架没有自己的ORM,但是它提供了与ORM的很好的集成,例如Hibernate,Apache iBATIS等。
简而言之,我们可以说Spring框架提供了一种分离的方式来开发Web应用程序。借助Spring中的这些概念(例如Dispatcher Servlet,ModelAndView和View Resolver),Web应用程序开发变得容易。
如果Spring可以解决很多问题,为什么我们需要Spring Boot?
现在,如果您已经从事过Spring,请考虑一下在开发具有所有功能的成熟Spring应用程序时遇到的问题。无法提出一个?让我告诉您-设置Hibernate数据源,实体管理器,会话工厂和事务管理非常困难。对于开发人员来说,使用带有最少功能的Spring MVC来建立基本项目会花费很多时间。
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/my-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
使用Hibernate时,我们必须配置诸如数据源,EntityManager等之类的东西。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:config/schema.sql" />
<jdbc:script location="classpath:config/data.sql" />
</jdbc:initialize-database>
<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory">
<property name="persistenceUnitName" value="hsql_pu" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
Spring Boot如何解决这个问题?
-
Spring Boot会完成所有使用的工作, AutoConfiguration 并且会照顾您的应用程序所需的所有内部依赖关系-您需要做的就是运行应用程序。如果Spring jar 在类路径中,则Spring Boot将使用Dispatcher Servlet自动配置 。如果Hibernate jar 在类路径中,它将自动配置到数据源 。Spring Boot为我们提供了一组预配置的Starter项目,这些项目将作为依赖项添加到我们的项目中。
-
在Web应用程序开发期间,我们将需要使用的jar,使用的jar版本以及如何将它们连接在一起。所有Web应用程序都有类似的需求,例如Spring MVC,Jackson Databind,Hibernate core和Log4j(用于记录)。因此,我们必须选择所有这些jar的兼容版本。为了降低复杂性,Spring Boot引入了我们所谓的Spring Boot Starters。
Spring Web Project的依赖关系
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
入门程序是一组方便的依赖项,可以将其包含在Spring Boot应用程序中。对于使用Spring和Hibernate,我们只需要在项目中包括spring-boot-starter-data-jpa依赖项。
Spring Boot Starter Web的依赖性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Boot Starter项目选项
这些是很少的入门项目,可帮助我们快速开发特定类型的应用程序。
-
spring-boot-starter-web-services:SOAP Web服务
-
spring-boot-starter-web:Web和RESTful应用程序
-
spring-boot-starter-test:单元测试和集成测试
-
spring-boot-starter-jdbc:传统JDBC
-
spring-boot-starter-hateoas:将HATEOAS功能添加到您的服务中
-
spring-boot-starter-security:使用Spring Security的身份验证和授权
-
spring-boot-starter-data-jpa:带有Hibernate的Spring Data JPA
-
spring-boot-starter-cache:启用Spring框架的缓存支持
-
spring-boot-starter-data-rest:使用Spring Data REST公开简单的REST服务