美文网首页程序员
来看看Spring与Spring boot到底有哪些区别

来看看Spring与Spring boot到底有哪些区别

作者: 套马杆的程序员 | 来源:发表于2020-12-07 20:49 被阅读0次

    什么是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如何解决这个问题?

    1. Spring Boot会完成所有使用的工作, AutoConfiguration 并且会照顾您的应用程序所需的所有内部依赖关系-您需要做的就是运行应用程序。如果Spring jar 在类路径中,则Spring Boot将使用Dispatcher Servlet自动配置 。如果Hibernate jar 在类路径中,它将自动配置到数据源 。Spring Boot为我们提供了一组预配置的Starter项目,这些项目将作为依赖项添加到我们的项目中。

    2. 在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服务

    相关文章

      网友评论

        本文标题:来看看Spring与Spring boot到底有哪些区别

        本文链接:https://www.haomeiwen.com/subject/uzatgktx.html