借助Spring Boot 简化 Spring 开发

Spring Boot 是令人兴奋的新项目,它提供了四个主要的特性,能够改变开发Spring应用程序的方式。

1、Spring Boot Starter: 他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。

2、自动配置: Spring Boot 的自动配置特性利用了Spring 4对条件化配置的支持,合理地推测应用所需的bean 并自动化配置它们。

3、命令行接口: Spring 的 CLI 发挥了Groovy 编程语言的优势,并结合自动配置进一步简化 Spring 应用的开发。

4、Actuator: 它为Spring Boot 应用添加了一定的管理特性。

我们要从头开始编写一个新的 Spring 应用。这是一个 Web 项目,所以需要 Spring MVC 。同时还要有 REST API 将资源暴露为 JSON ,所以在构建中需要包含Jackson JSON 库

首先让我们从添加依赖开始,新建一个 Gradle 项目,在 build.gradle dependency 添加以下内容:

    compile("org.springframework.boot:spring-boot-starter-web:1.1.4.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-jdbc:1.1.4.RELEASE")
    compile("org.thymeleaf:thymeleaf-spring4:2.1.2.RELEASE")
    compile("com.h2database:h2:1.3.174")

Spring Boot 的 Starter 减少了构建中的依赖列表的长度,而 Spring Boot 的自动配置功能则缩减了 Spring 配置的数量。它在实现时,会考虑应用中的其他因素并推断你所需要的 Spring 配置。

Spring Boot Starter 也会触发自动配置。例如在 Spring Boot 应用中,如果我们想使用 Spring MVC 的话,所需要做的仅仅是将 Web Starter 作为依赖放入到构建中。将 Web Starter 放入到构建中以后,它会自动添加 Spring MVC 依赖。如果 Spring Boot 的 Web 自动配置探测到 Spring MVC 位于类路径下,它将会自动配置支持 Spring MVC 的多个 bean,包括视图解析器、资源处理器、以及消息转换器等等。

Spring Boot CLI 充分利用了Spring Boot Starter 和自动配置的魔力,并添加了一些 Groovy 的功能,它简化了 Spring 的开发流程,通过 CLI ,我们能够运行一个或多个 Groovy 脚本,并查看它是如何运行的。在应用的运行过程中,CLI 能够自动导入 Spring 类型并解析依赖。

Spring Boot Actuator 为 Spring Boot 项目带来了很多有用的特性,包括:

1、管理端点;

2、合理的异常处理以及默认的“/error”映射端点;

3、获取应用信息的“Info”端点;

4、当启用Spring Security 时,会有一个审计事件框架。

这里我们开发一个 Contacts 应用。

ContactController 为 Contacts 应用处理基本的 Web 请求。

package contacts;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/")
public class ContactController {

    private ContactRepository contactRepo;

    @Autowired
    public ContactController(ContactRepository contactRepo) {
        this.contactRepo = contactRepo;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String home(Map<String,Object> model){
        List<Contact> contacts = contactRepo.findAll();
        model.put("contacts",contacts);
        return "home";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String submit(Contact contact){
        contactRepo.save(contact);
        return "redirect:/";
    }

}

home()方法使用注入的 ContactRepository 来获取所有 Contact 对象的列表,并将它们放到模型当中,然后把请求转交给home视图。这个视图将会展现联系人的列表以及添加新的Contact 表单。submit()方法将会处理表单提交的POST请求,保存Contact,并重定向到首页。

Contact 是一个简单的POJO

package contacts;

public class Contact {
    private Long id;
    private String firstName;
    private String lastName;
    private String phoneNumber;
    private String emailAddress;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }
}

按照传统的方式,Java Web 应用会使用JSP作为视图层的技术。但是,Thymeleaf 的原生模板比 JSP 更加便于使用,而且它能够让我们以 HTML 的形式编写模板。鉴于此,我们会使用Thymeleaf 来定义 Contacts 应用的home视图。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <title>Spring Boot Contacts</title>
    <link rel="stylesheet" th:href="@{/style.css}" />
  </head>

  <body>
    <h2>Spring Boot Contacts</h2>
    <form method="POST">
      <label for="firstName">First Name:</label>
      <input type="text" name="firstName"></input><br/>
      <label for="lastName">Last Name:</label>
      <input type="text" name="lastName"></input><br/>
      <label for="phoneNumber">Phone #:</label>
      <input type="text" name="phoneNumber"></input><br/>
      <label for="emailAddress">Email:</label>
      <input type="text" name="emailAddress"></input><br/>
      <input type="submit"></input>
    </form>

    <ul th:each="contact : ${contacts}">
      <li>
        <span th:text="${contact.firstName}">First</span>
        <span th:text="${contact.lastName}">Last</span> :
        <span th:text="${contact.phoneNumber}">phoneNumber</span>,
        <span th:text="${contact.emailAddress}">emailAddress</span>
      </li>
    </ul>
  </body>
</html>

只要我们将 Thymeleaf 添加到项目的类路径下,就启用了 Spring Boot 的自动配置。当应用运行时,Spring Boot 将会探测到类路径中的Thymeleaf,然后会自动配置视图解析器,模板解析器以及模板引擎,这些都是在 Spring MVC 中使用 Thymeleaf所需要的。因此,在我们的应用中,不需要使用显示 Spring 配置的方式来定义 Thymeleaf。

ContactController 中 home() 方法返回的逻辑视图名为 home ,因此模板文件名为 home.html,自动配置的模板解析器会在指定的目录下查找Thymeleaf模板,这个目录也就是相对根类目录下的templates目录下  ,所以在Maven或Gradle项目中,我们需要将home.html放到“src / main / resources / templates” 中。这个模板中使用了style.css文件,我们倾向于将静态资源放入“src / main / resources / public”目录下。

style.css

body {
  background-color: #eeeeee;
  font-family: sans-serif;
}

label {
  display: inline-block;
  width: 120px;
  text-align: right;
}

持久化数据

ContactRepository 能够从数据库中存取 Contact

package contacts;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

@Repository
public class ContactRepository {

    private JdbcTemplate jdbc;

    @Autowired
    public ContactRepository(JdbcTemplate jdbc) {
        this.jdbc = jdbc;
    }

    public List<Contact> findAll(){
        return jdbc.query("select id, firstName, lastName, phoneNumber, emailAddress from contacts order by lastName",
                new RowMapper<Contact>() {
                    @Override
                    public Contact mapRow(ResultSet rs, int rowNum) throws SQLException {
                        Contact c = new Contact();
                        c.setId(rs.getLong(1));
                        c.setFirstName(rs.getString(2));
                        c.setLastName(rs.getString(3));
                        c.setPhoneNumber(rs.getString(4));
                        c.setEmailAddress(rs.getString(5));
                        return c;
                    }
                });
    }

    public void save(Contact contact){
        jdbc.update("insert into contacts(firstName,lastName,phoneNumber,emailAddress) values(?,?,?,?)",
                contact.getFirstName(),contact.getLastName(),contact.getPhoneNumber(),contact.getEmailAddress());
    }
}

ContactRepository使用了@Repository注解,在组件扫描的时候他会被发现并创建为 Spring 应用上下文中的 bean。

JdbcTemplate 呢?我们难道不用再Spring应用上下文中声明JdbcTemplate bean 吗?为了声明它, 我们是不是需要声明一个H2 DataSource?

一切都不需要!!当 Spring Boot 嗅探到 Spring 的 JDBC 模块和H2 在类路径下的时候,自动配置就会发挥作用,将会自动配置 JdbcTemplate bean 和 H2 DataSource bean。

我们需要自己创建contacts表的模式,Spring Boot 可不会知道 contacts 表会是什么样子。

我们将一个名为schema.sql的脚本文件放入类路径根下,也就是Maven或Gradle项目目录下的”src/main/resources“目录下。

create table contacts (
    id identity,
    firstName varchar(30) not null,
    lastName varchar(50) not null,
    phoneNumber varchar(13),
    emailAddress varchar(30)
);

我们需要一个特定的类来启动Spring Boot 项目。

package contacts;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

点击运行,打开浏览器输入localhost:8080就能进入Contacts应用。

原文地址:https://www.cnblogs.com/hoo334/p/12227155.html

时间: 2024-10-05 23:25:08

借助Spring Boot 简化 Spring 开发的相关文章

Spring Boot 企业级应用开发实战

Spring Boot 企业级应用开发实战[下载地址:https://pan.baidu.com/s/1SbB-auGkUN6r2i6dtv7t_w ] Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用.Spring Boot框架降低了Spring技术体系的使用门槛,简化了Spring应用的搭建和开发过程,提供了流行的第三方开源技术的自动集成. Spring Boot是由Pivotal团队提供的全新框

Spring Boot 企业级应用开发实战 刘伟东-2018年3月第一版

Spring会自动搜索某些路径下的Java类 并将这些类注册微Bean实例,这样就省去了所有Bean都配置在XML的麻烦 Spring会适当地将显示指定路径下的的类全部注册微Spring Bean . Spring通过使用特殊的注解来标注Bean类 @Component 标注一个普通的Spring Bean类 @Controller 标注一个控制器组件类 @Service 标注一个服务组件类 @Repository 标注一个仓库组件类 甚至SQL语句也可以注解 Spring Boot是伴随着Sp

Spring Boot和JPA开发的一些坑

最近新的项目API接口基于Spring Boot和JPA开发,做了几天的学习和预研,发现使用Spring Boot开发效率上确实比较高,但也碰到了一些小坑,特别记录下. 配置文件问题 ,默认只要一个配置文件application.properties,不要再想ApplicationContent.xml等spring的配置文件了 logback配置文件路径问题,使用绝对路径读取没问题,基于classpath路径则读取不到 ,这个问题有待进一步解决 Spring-boot不能扫描到启动函数包外的b

maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 1.1创建聚合工程的父模块 1.2设置父模块的POM文件 主要是配置 spring boot版本,spring cloud 版本,和一些通用的依赖 比如这里的 lombok依赖 <?xml version="1.0" encoding="UTF-8"?>

spring boot与spring mvc的区别是什么?

Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能.Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML. JavaConfig.hin处理起来比较繁琐.于是为了简化开发者的使用,从而创造性地推出了Spr

Spring、Spring Boot、Spring Frame、Spring MVC的区别

Spring框架就像一个厂商,其下有很多产品,如Spring Boot.Spring Frame.Spring Cloud等等. Spring Boot用于快速.方便.简单的搭建一个Spring项目.之所以说它快速.方便.简单,是因为Spring Boot融合看来很多第三方库,提供了配置这些库及本身的一些简单的方式,从而进行了简化,避免了我们自己对包的导入和繁琐的XML文件配置.我们来看下官方文档. 我们可以看到Spring内嵌了一些serverse等容器,通过Spring Boot的配置,可以

基于 spring boot 和 spring mvc 的快速开发框架 summer-boot

summer-boot 详细介绍此项目目的在于提供一个简化.简洁.迅速的开发架构. 它是基于spring boot和spring mvc高度封装的快速开发框架,数据库操作工具summerDao是基于jdbcTemplate高度封装简化.拥有超级简单实用的ORM功能.和ibatis一样强大但更简单.无需映射配置的dao工具,视图层采用的是Rythm(最简洁的java模板引擎.可以用它来做web项目.微服务.socket服务,且同一套代码同时兼容这三种方式. 它的优点如下:基本建立在spring一套

spring boot(spring)

一:spring的介绍 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. 它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用.简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 二:spring boot 1. Spring Boot简介Spring 诞生时是 Java 企业版(Java Enterpris

Spring Boot --- 认识Spring Boot

在前面我们已经学习过Srping MVC框架,我们需要配置web.xml.spring mvc配置文件,tomcat,是不是感觉配置较为繁琐.那我们今天不妨来试试使用Spring Boot,Spring Boot让我们的Spring应用变的更轻量化.比如:你可以仅仅依靠一个Java类来运行一个Spring引用.你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用. 一 Spring Boot简介 1.Spring Boot特点 开箱即用,提供各种默认配置来简