上一节的代码是spring-boot的入门程序,也是官方文档上的一个程序。这一节会引入spring-boot官方文档推荐的方式来开发代码,并引入我们在spring开发中service层等的调用。

1、代码结构如下

2、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xxx</groupId>
    <artifactId>myboot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version><!-- 官方推荐 -->
    </properties>
    <!-- 引入spring-boot-starter-parent做parent是最好的方式,
         但是有时我们可能要引入我们自己的parent,此时解决方式有两种:
         1)我们自己的parent的pom.xml的parent设为spring-boot-starter-parent(没有做过验证,但是感觉可行)
         2)使用springboot文档中的方式:见spring-boot-1.2.5-reference.pdf的第13页
    -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
    </parent>

    <!-- <dependencyManagement>
        <dependencies>
            <dependency>
                Import dependency management from Spring Boot
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement> -->

    <!-- 引入实际依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 值得注意的是,如果没有引用spring-boot-starter-parent做parent,
                且采用了上述的第二种方式,这里也要做出相应的改动 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

说明:pom.xml文件与上一节的完全一样。

3、Application.java

package com.xxx.firstboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @EnableAutoConfiguration:spring boot的注解,一般只用于主类,
 * 是无xml配置启动的关键部分,明确指定了扫描包的路径为其修饰的主类的包(这也就是为什么主类要放在根包路径下的原因)
 *
 * @ComponentScan 进行包的扫描,扫描路径由@EnableAutoConfiguration指定了
 *
 * 主类要位于根包路径下,方便之后的扫描(We generally recommend that you locate your main application class in a root package above other classes.)
 */
@SpringBootApplication        //same as @Configuration+@EnableAutoConfiguration+@ComponentScan
public class Application {
    /**
     * spring boot的入口,在整个子项目在内,
     * 只能有一个main方法,否则spring boot启动不起来
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

注意:

  • 主类要位于根包路径下(例如,com.xxx.firstboot),这是推荐做法,方便扫描
  • 每一个jar(即每一个子项目)都要有一个主方法,用于启动该jar(也就是一个微服务)
  • 在主类上添加注解@SpringBootApplication,该注解相当于添加了如下三个注解
    • @Configuration:该注解指明该类由spring容器管理
    • @EnableAutoConfiguration:该注解是无xml配置启动的关键部分
    • @ComponentScan:该注解指定扫描包(如果主类不是位于根路径下,这里需要指定扫描路径),类似于spring的包扫描注解

4、application.properties

1 #user info
2 user.id=1
3 user.username=zhaojigang
4 user.password=123

注意:

  • application.properties文件是spring-boot的默认文件,一般各种配置(包括:数据源配置,httpclient配置等)都配在这里就好

5、User.java

package com.xxx.firstboot.domain;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @ConfigurationProperties(prefix="user")
 * 自动读取application.properties(是spring-boot默认查找的文件)文件中的user.*的属性
 * 在没有使用@ConfigurationProperties的情况下,可以使用@Value("${user.id}")来一个个指定属性的值
 *
 * 注意:如果要使用@ConfigurationProperties和@Value,需要将该bean添加@Component,
 * 因为在后边的对该类的使用中,需要直接将该类使用@Autowire注解注入,这样这些属性的自动注入才起作用,
 * 具体使用查看"UserService"
 */
@Component
@ConfigurationProperties(prefix="user")
public class User {

    //@Value("${user.id}")
    private int id;

    //@Value("wangna")
    private String username;

    private String password;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

注意:

  • 该类就是一个普通的model,在ssm框架中我们并没有将这样的model归给spring容器去管理,在这里使用@Component注解将其交由spring容器去处理,这样在之后的使用中,就可以直接将该model注入到其使用类中。
  • 在该类上添加了@ConfigurationProperties(prefix="user")注解,这样的意思就是可以自动扫描application.properties文件相关前缀的配置,并根据名称配置到该类的每一个属性上去
  • 也可以在属性上使用@Value注解单独复值,当然前提是没有配置@ConfigurationProperties,如果配置了,@Value注解失效

6、UserService.java

package com.xxx.firstboot.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xxx.firstboot.domain.User;

@Service
public class UserService {

    @Autowired
    private User user;

    public User getUser(){
        return user;
    }

}

注意:

  • 这里直接注入了User,这和类正是上边的那个model

7、UserController.java

package com.xxx.firstboot.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.xxx.firstboot.domain.User;
import com.xxx.firstboot.service.UserService;
/**
 * @RestController:spring mvc的注解,
 * 相当于@Controller与@ResponseBody的合体,可以直接返回json
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/getUser")
    public User getUser() {
        return userService.getUser();
    }

}

说明:

  • 这个类其实就是开发中,开发一个spring-boot程序的最基本最常用的方式。(在微服务应用中,用到类似于"Java企业应用开发实践"系列中的父子模块开发,之后再说)
  • 相对于ssm而言,spring-boot的读取属性文件的方式也相当容易,读取属性文件常用的三种方式
    • 使用FileUtil去读:见第一章 属性文件操作工具类
    • 使用如上的注解实现(最推荐的方式)
    • 使用Environment这个类来获取就行(这个可能写错类名了)

对于spring-boot而言,其本身有很多集成的jar包(见下边),我们可以根据自己的需求引入相应的jar,但是暂无与mybatis集成的jar。

spring-boot相关的依赖包(可以根据需求自己引入):

【第二章】 第二个spring-boot程序的更多相关文章

  1. 第一章 第一个spring boot程序(转载)

    第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html   环境: jdk:1.8.0_73 mave ...

  2. 第一章 第一个spring boot程序

    环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...

  3. 我的第一个spring boot程序(spring boot 学习笔记之二)

    第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...

  4. Ionic 入门与实战之第二章第二节:Ionic 环境搭建之 Ionic Lab 使用

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第二节,主要对 Ionic Lab 工具作了介绍,并讲解了其使用方法,这也是一个开发 Ionic 比较好的调试工具. 原文发表于 ...

  5. 构建Spring Boot程序有用的文章

    构建Spring Boot程序有用的文章: http://www.jb51.net/article/111546.htm

  6. Spring Boot从入门到精通(一)搭建第一个Spring Boot程序

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  7. Spring Boot程序接收命令行参数

    Spring Boot程序接收命令行参数 输入一行,回车,触发一次.如果想要调用service层,也是可以,能调用service层,就可以做很多事,触发一次就好比调用了一次http接口一样 packa ...

  8. 第二章 第二个spring-boot程序

    上一节的代码是spring-boot的入门程序,也是官方文档上的一个程序.这一节会引入spring-boot官方文档推荐的方式来开发代码,并引入我们在spring开发中service层等的调用. 1. ...

  9. 第二章 第二个spring-boot程序(转载)

    本编博客转发自:http://www.cnblogs.com/java-zhao/p/5336369.html 上一节的代码是spring-boot的入门程序,也是官方文档上的一个程序.这一节会引入s ...

  10. 【第一章】 第一个spring boot程序

    环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...

随机推荐

  1. webpack学习三——output

    output的两个参数filename,path 一.path输出路径,输出路径要绝对路径,否则报错.做法如下: path:__dirname + 'path' 二.filename 输出文件命,相对 ...

  2. git vim 编辑器基本操作

      用 git 命令行提交文件时,默认使用 vim 编辑器,基本操作: 按 a, i 或 o 进入编辑模式 按 ESC 进入操作模式 在操作模式下,:wq 为写入退出,:q! 不保存退出

  3. 二进制协议 vs 文本协议

    二进制协议 vs 文本协议 在服务器程序开发过程中,各个服务直接需要进行交互.这样就需要定义消息的协议,一般来说协议主要包括二进制协议和文本协议,下面就我在工作中用到的两种协议说说自己的看法. 1 二 ...

  4. gerrit 使用教程(一)

    原文地址:https://www.jianshu.com/p/b77fd16894b6 1, Gerrit是什么? Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控 ...

  5. AdaBoost Classifier和Regressor

    Adaboost原理传送门 AdaBoost在我看理论课程的时候,以分类为例子来讲解的,谁知道sklearn里面基本上都有classifier和regressor两种.这个倒是我没想到的!!! fro ...

  6. LCD驱动

    LCD的驱动情况比较多. 对于一般的LCD,驱动方式有MCU,MPU,SPI等.其中MCU方式不需要输入clk,vsync,hsync等信号.完全可以通过异步来驱动,但是这样难以将屏 幕做到很大.MP ...

  7. python3 列表的常用方法

    Python3中常用的列表方法(method) 见:help(list) 方法 意义 L.index(v [, begin[, end]]) 返回对应元素的索引下标, begin为开始索引,end为结 ...

  8. Ignite集群管理——基于静态IP的节点发现

    Ignite作为分布式内存,集群管理必不可少,Ignite支持基于组播,静态IP,Zookeeper,JDBC等方式发现节点,本文主要介绍基于静态IP的节点发现. 两个最重要的TCP通信设置类: 1. ...

  9. 调用spark API,监控任务的进度

    我们现在需要监控datapre0这个任务每一次执行的进度,操作如下: 1. 如图所示,打开spark管理页面,找到对应的任务,点击任务名datapre0 2. 进去之后,获得对应IP和端口  3. 访 ...

  10. Linux中Postfix邮件安装配置(二)

    本套邮件系统的搭建,从如何发邮件到收邮件到认证到虚拟用户虚拟域以及反病毒和反垃圾邮件等都有详细的介绍.在搭建过程中必须的参数解释以及原理都有告诉,这样才能更好地理解邮件系统. 卸载自带postfix ...