SpringBoot入门

1、Spring发展

Spring1.x时代:都是xml方式配置bean,但是随着项目的规模增大,xml变得臃肿不堪,非常复杂。
Spring2.x时代:增加注解方式,xml和注解共存。那么就讨论起用注解还是用xml,主要还是实践。
Spring3.x-Spring4.x:Spring推荐使用java配置方式。

2、Spring的java配置方式

Spring的java配置方式是通过@configuration和@bean两个注解实现的:
 1.@configuration标注在类上边,相当于配置文件
 2.@bean标注在方法上,相当于xml中的bean。

 2.1 读取外部的资源配置文件

 @PropertySource可以指定外部的配置文件,@Value可以得到注解中的值。

1.  @Configuration //通过注解表明这个类是个Spring的配置,相当于xml文件  
2.  @ComponentScan(basePackage = "") //配置扫描包  
3.  @PropertySource(“classpass:jdbc.properties” ,” ” ,” ”) //如果配置文件有多个的话,加逗号,再写配置文件  
4.  public class SpringConfig {  
5.        
6.      @Value(${jdbc.url})  
7.      private String jdbcUrl;  
8.        
9.      @Bean //通过注解表示是一个Bean对象,相当于xml的<bean>  
10.     public UserDao getUserDao() {  
11.         return new UserDao;  
12.     }  
13. }  

3、SpringBoot示例

3.1 Spring解决了什么问题?

Java开发过程中存在的一些问题,繁多的配置,低下的开发效率,项目部署复杂,与第三方技术集成困难。
SpringBoot内置了一些流行的开发框架的配置,让项目能够快速运行起来,SpringBoot容易创建一个能独立运行的项目(不用再向容器(Tomcat)部署了)。

3.2、Spring优点

快速构建项目
对主流框架无缝集成
项目可独立运行,无需依赖外部Servlet容器
提供运行时的应用监控
极大提高了开发、部署的效率
与云计算的天然集成

3.3、SpringBoot入门项目构建

3.3.1 设置SpringBoot的parent

<!--spring项目必须把parent设置为SpringBoot的parent,其中包含了很多默认配置 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

3.3.2 导入SpringBoot的Web支持

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.9.RELEASE</version>
</dependency>

3.3.3 添加SpringBoot的插件

<build>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-maven-plugin -->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.5.9.RELEASE</version>
        </plugin>
    </plugins>
</build>

3.3.4 编写第一个SpringBoot的应用

package com.inverseli.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @ClassName: HelloApplication
 * @Description:
 * @Author: li
 * @Date: 2018/7/10 12:02
 * @Version: 1.0
 */
@Controller
@SpringBootApplication //
@Configuration
public class HelloApplication {

    @RequestMapping("hello")
    @ResponseBody
    public String Hello() {
        return "say hello";
    }
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class,args);
    }
}

其中注解:
@SpringBootApplication: 通常用在主类上。
@Controller:就是SpringMvc的一个控制器。
@Configuration:指出该类是 Bean 配置的信息源,相当于XML中的<beans></beans>,一般加在主类上。
@Bean:相当于XML中的<bean></bean>,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
@ResponseBody:表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。


Maven的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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--spring项目必须把parent设置为SpringBoot的parent,其中包含了很多默认配置 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <groupId>com.inverseli.springboot</groupId>
    <artifactId>inverseli-springboot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.jolbox</groupId>
            <artifactId>bonecp-spring</artifactId>
            <version>0.8.0.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.9.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-maven-plugin -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.9.RELEASE</version>
            </plugin>
        </plugins>
    </build>

</project>

在其中并没有配置Tomcat,也没有Spring的配置文件。

4、SpringBoot的核心

4.1 SpringBoot入口类和@SpringBootApplication注解

由于约定,总会有一个xxxApplication的类会是SpringBoot的入口类,入口类中有main方法。
@SpringBootApplication: 是SpringBoot的核心注解,其实是一个组合注解组合了以下注解:
@SpringBootConfigure: 是SpringBoot的配置注解,本身也是一个组合注解。在SpringBoot项目中推荐使用@SpringBootConfigure代替@Configure
@EnableAutoConfigure 启用自动配置,该注解会根据项目依赖的jar包,自动引入配置。例如项目中引入了spring-boot-starter-web依赖,项目就会引入SpringMvc的依赖,SpringBoot会自动配置Tomcat和SpringMvc。
@ComponentScan 默认扫描@SpringBootApplication所在的类的同级目录和子目录。

4.2 关闭自动配置

//如果不需要某项提供的自动配置,那么可以手动进行关闭
@Controller
@SpringBootApplication(exclude = {MongoAutoConfiguration.class})
@Configuration
public class HelloApplication {}

就关闭了MongoAutoConfiguration 的自动配置。

4.3 自定义SpringBoot banner

banner 就是运行项目时在console显示spring的标志
把你想换成的样式文字放到一个txt文本中,然后把该文本放到resource文件夹中,重新运行项目就好了。
当然也可以禁用banner

public static void main(String[] args) {
    SpringApplication springApplication = new SpringApplication(HelloApplication.class);
    springApplication.setBannerMode(Banner.Mode.OFF);
    springApplication.run(args);
}

4.4 SpringBoot全局配置

SpringBoot项目使用一个全局配置文件,一般叫做application.properties或者是application.yml,一般放到resource文件夹下。

假如要改掉Tomcat的端口,只需在配置文件中Server.port = 8088就可以了;可以查看官方文档以确定配置文件参数;

官方文档地址:版本2.1.0.BUILD-SNAPSHOT

https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/

4.5 Starter pom

SpringBoot提供了简化企业级开发绝大多数场景中的Starter pom,只要使用了相关的Starer pom,相关的技术配置就会消除,就可以得到SpringBoot为我们提供的bean。除了官方提供的Starter pom,也有第三方提供的

4.6 SpringBoot自动配置的原理

SpringBoot在进行SpringApplication对象实例化的时候,会加载META-INF/spring.factories文件,将配置文件中的文件载入到Spring容器中。

5、SpringBoot

层级关系: 注意HelloApplication的位置(启动类位置很重要)

image.png

HelloApplication.java

package com.inverseli.learning;

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

/**  
 * @date:2018年9月19日 上午11:38:55    
 * @author liyuhao
 * @version 1.0   
 * @since JDK 1.8  
 * @description:  
 */
@SpringBootApplication
public class HelloApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class,args);
    }

}

controller/HelloController.java

package com.inverseli.learning.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**  
 * @date:2018年9月19日 上午11:43:26    
 * @author liyuhao
 * @version 1.0   
 * @since JDK 1.8  
 * @description:  
 */
@RestController
public class HelloController {
    
    @ResponseBody
    @RequestMapping("/hello")
    public String toTest() {
        return "Hello World!";
    }
}

结果:

result.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容