什么是Spring Boot框架?什么是Spring框架?他们的目标是什么?他们产生的背景是怎样的,两者有什么区别,我们应该使用哪个框架进行开发,带着这样的疑问,我们开始今天的讲解。
Spring框架是JAVA最受欢迎的应用程序开发框架之一。Spring的最佳功能是它具有依赖注入(DI)或控制反转(IOC), 这使我们能够开发松耦合的应用程序。而且,松耦合的应用程序可以轻松地进行单元测试。 隔壁的php中的Laravel为什么大手欢迎,也是它实现了依赖注入、控制反转的功能。
考虑下面的示例- 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框架做了所有艰苦的工作,使事情变得更简单。
因此,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框架还有许多其他功能,以下是一些它比较流行的模块:
面向切面的编程(AOP)是Spring框架的另一个强项。面向对象编程中强调的是类,而在AOP中,强调的是面。
例如,如果要在项目,日志记录等中添加安全性,则可以仅使用AOP并将其作为跨领域的关注点,而不涉及主要业务逻辑。可以在方法调用之后,方法调用之前,方法返回之后或异常发生之后执行任何操作。
Spring框架没有自己的ORM,但是它提供了与ORM的很好的集成,例如Hibernate,Apache iBATIS等。
简而言之,我们可以说Spring框架提供了一种分离的方式来开发Web应用程序。借助Spring中的这些概念(例如Dispatcher Servlet,ModelAndView和View Resolver),Web应用程序开发变得容易。
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>
<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 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>
Starters 是一组方便的依赖项,可以将其包含在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项目有很多软件包。一旦添加了该启动程序依赖项,Spring Boot Starter Web就会预先打包所有这些文件。作为开发人员,我们无需担心这些依赖关系及其兼容版本。
Spring Boot Starter项目选项
这些是很少的入门项目,可帮助我们快速开发特定类型的应用程序。
正是有了Spring Boot,让我们告别了繁琐的配置,可以更加快速专注地开发我们的web应用。