Java开发的劣势
- 开发的复杂度高;
- 使用Maven开发,需要管理一堆的Maven的配置依赖库;
- Rest 技术已经开始在行业之中广为流传,而 Java 要想实现 Rest 架构的开发(基于Spring),那么也是相当麻烦的;
- 现在行业之中,Spring 已经作为了绝对的 java 架构,但是如果要想在 Spring 之中整合 RabbitMQ、Kafka、ActiveMQ、MySQL、Druid、Redis、Shiro,需要编写一堆堆的*.xml 配置文件;
SpringBoot的出现为我们解决了上述的Java开发劣势,SpringBoot 的最终奉行的宗旨:简化复杂的程序开发,减少依赖的配置,废除掉所有的配置文件,让开发变得更简单纯粹,核心:“零配置”。
SpringBoot的HelloWorld程序
基于官方的例子,https://projects.spring.io/spring-boot/
-
创建一个Maven工程。虽然SpringBoot是以WEB工程来运行的,但archetype只需选择quickstart即可。
- 按照官方给出的要求配置一个父pom即可
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.4.RELEASE
cn.zgc
helloworld
0.0.1-SNAPSHOT
jar
1.7
UTF-8
junit
junit
test
org.springframework.boot
spring-boot-starter-web
bootfirst
org.apache.maven.plugins
maven-compiler-plugin
${jdk.version}
- 编写SpringBoot的启动类
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
@EnableAutoConfiguration注解的含义为,开启自动配置处理。这个注解告诉SpringBoot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
- 启动访问
在Idea开发工具中,可以直接运行SampleController类。或者通过maven命令:spring-boot:run也可运行Springboot项目。运行起来之后在浏览器中可以直接访问服务
我们继续往工程中和SampletController类同一个包中再添加一个Controller类,代码如下:
package cn.zgc.springboot.basic;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HomeController {
@RequestMapping("/home")
@ResponseBody
public String home(){
return "home page";
}
}
访问http://127.0.0.1:8080/index时,却出现如下页面
出现这种情况,是由于HomeController没有被Spring容器加载所导致,可以通过配置Spring的包扫描路径来解决这个问题,我们在启动类SampleController中加入@ComponentScan注解即可。
@EnableAutoConfiguration
@ComponentScan("cn.zgc.springboot.basic")
public class SampleController {
另外为了简化,SpringBoot提供了@SpringBootApplication,它是个复合注解,内部已经包含@EnableAutoConfiguration和@ComponentScan。@SpringBootApplication默认的包扫描路径为当前启动类的包。所以
Spring官方建议:为了开发的方便,所有的程序类一定要在启动类所在包的子包下。
使用自己的父POM
在HelloWorld的例子中,我们看到要开发SpringBoot程序需要让工程的pom继承spring-boot-starter-parent。在实际开发中,一般是要继承自己的父pom的,这时候该如何处理呢?
首先在我们自己的父pom.xml文件中加入如下配置
org.springframework.boot
spring-boot-dependencies
1.5.4.RELEASE
pom
import
然后子模块只要继承自己的父POM,同样也能为我们引入SpringBoot功能。
Restful访问路径
Restful风格的API
- GET /product:列出所有商品
- POST /product:新建一个商品
- GET /product/ID:获取某个指定商品的信息
- PUT /product/ID:更新某个指定商品的信息
- DELETE /product/ID:删除某个商品
- GET /product/ID/purchase :列出某个指定商品的所有投资者
- get /product/ID/purchase/ID:获取某个指定商品的指定投资者信息
SpringBoot提供了@RestController注解,它是一个复合注解,相当于@Controller加@ResponseBody。如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器将不起作用,返回的内容就是return里的内容。
@RestController
public class HomeController {
@RequestMapping("/home")
public String home(){
return "home page";
}
}
使用内置对象
在 SpringBoot 中的控制器的形式和 SpringMVC 是一样的,所以如果现在要想在你的程序之中去使用 JSP 的内置对象,那么也可以按照与 SpringMVC 同样的方式进行。
@RequestMapping("/home")
public String home(HttpServletRequest request, HttpServletResponse response){
System.out.println(request.getMethod());
System.out.println(response.getCharacterEncoding());
return "home page";
}
SpringBoot代码测试
在pom.xml文件中加入相关的依赖包
org.springframework.boot
spring-boot-starter-test
test
junit
junit
test
测试类
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SampleController.class)
public class TestSampleController {
@Autowired
private SampleController sampleController;
@Test
public void testHome(){
Assert.assertEquals(sampleController.home(),"Hello World!");
}
}
打包发布
SpringBoot 作为微架构实现主要技术,其发布项目的方式极为简单,只需要你在你的项目中配置好插件,以及打包就可以执行了,并且这个执行不需要特别复杂的配置。
在父POM文件中加入打包插件
org.springframework.boot
spring-boot-maven-plugin
cn.zgc.springboot.basic.StartSpringBootMain
repackage
对需要打包的项目模块进行打包处理:clean package,打出来的是个可执行的jar包,直接运行java -jar xxx.jar就能启动SpringBoot服务。