Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需 开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通 过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能
Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式, 可以代替XML
Spring Boot 精要
Spring Boot最重要的是以下四个核心。
自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序, 无需传统项目构建。
Actuator:能够深入运行中的Spring Boot应用程序
Spring Boot 不是什么
首先,Spring Boot不是应用服务器。这个误解是这样产生的:Spring Boot可以把Web应用程 序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。
Spring Boot 在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),以此实现这一功能。但这是 内嵌的Servlet容器提供的功能,不是Spring Boot实现的。
Spring Boot也没有实现诸如JPA或JMS(Java Message Service,Java消息服务)之 类的企业级Java规范。它的确支持不少企业级Java规范,但是要在Spring里自动配置支持那些特 性的Bean。
例如,Spring Boot没有实现JPA,不过它自动配置了某个JPA实现(比如Hibernate)的 Bean,以此支持JPA。
最后,Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性, 以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置
Spring Initializr 初始化 Spring Boot 项目
Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。
虽 然不能生成应用程序代码,但它能为你提供一个基本的项目结构,以及一个用于构建代码的 Maven或Gradle构建说明文件。 Spring Initializr有几种用法。
通过Web界面使用。
通过Spring Tool Suite使用。
通过IntelliJ IDEA使用。
使用Spring Boot CLI使用。
idea使用创建springboot项目:
下一步:
下一步:
下一步:
再下一步:
然后构建了springboot项目架构,需要自己在pom.xml中配置maven依赖jar包
启动引导Spring ReadingListApplication在Spring Boot应用程序里有两个作用:
配置和启动引导。
首先, 这是主要的Spring配置类。虽然Spring Boot的自动配置免除了很多Spring配置,但你还需要进行 少量配置来启用自动配置。
正如代码清单2-1所示,这里只有一行配置代码。
代码清单2-1 ReadingListApplication.java不仅是启动引导类,还是配置类
package readinglist;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ReadingListApplication { public static void main(String[] args) { SpringApplication.run(ReadingListApplication.class, args);
}
}
@SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能。
@SpringBootApplication将三个有用的注解组合在了一起,等价于以下三个注解:
@Configuration:标明该类使用Spring基于Java的配置。
@ComponentScan:启用组件扫描,这样Web控制器类和其他组件才能自动发现并注册为Spring应用程序上下文里的 Bean。使用@Controller进行注解,这样组件扫描才能找到它。
@EnableAutoConfiguration :启用自动配置,不需要写很多配置文件。
在Spring Boot的早期版本中,需要在ReadingListApplication类上同时标上这三个注 解,但从Spring Boot 1.2.0开始,有@SpringBootApplication就行了。 如我所说,ReadingListApplication还是一个启动引导类。要运行Spring Boot应用程序 有几种方式,其中包含传统的WAR文件部署。但这里的main()方法让你可以在命令行里把该应 用程序当作一个可执行JAR文件来运行。这里向SpringApplication.run()传递了一个 ReadingListApplication类的引用,还有命令行参数,通过这些东西启动应用程序。
. 测试Spring Boot应用程序
Initializr还提供了一个测试类的骨架,可以基于它为你的应用程序编写测试。
但 ReadingListApplicationTests(代码清单2-2)不止是个用于测试的占位符,它还是一个例 子,告诉你如何为Spring Boot应用程序编写测试。
代码清单2-2
@SpringApplicationConfiguration加载Spring应用程序上下文
package readinglist;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import readinglist.ReadingListApplication;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration( classes = ReadingListApplication.class)
@WebAppConfiguration
public class ReadingListApplicationTests {
@Test
public void contextLoads() {
}
}
一个典型的Spring集成测试会用@ContextConfiguration注解标识如何加载Spring的应用 程序上下文。但是,为了充分发挥Spring Boot,这里用@SpringApplicationConfiguration注解。
在代码清单2-2里看到的那样,ReadingListApplicationTests 使用@SpringApplicationConfiguration注解从ReadingListApplication配置类里加载Spring应用程序上下文。
ReadingListApplicationTests里还有一个简单的测试方法,即contextLoads()。
实 际上它就是个空方法。但这个空方法足以证明应用程序上下文的加载没有问题。如果 ReadingListApplication里定义的配置是好的,就能通过测试。如果有问题,测试就会失败。 当然,现在这只是一个新的应用程序,你还会添加自己的测试。但contextLoads()方法是 个良好的开端,此刻可以验证应用程序提供的各种功能。