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的  
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



    org.springframework.boot
    spring-boot-starter-parent
    1.5.9.RELEASE


3.3.2 导入SpringBoot的Web支持



    org.springframework.boot
    spring-boot-starter-web
    1.5.9.RELEASE


3.3.3 添加SpringBoot的插件


    
    
        
            org.springframework.boot
            spring-boot-maven-plugin
            1.5.9.RELEASE
        
    


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中的,一般加在主类上。
@Bean:相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
@ResponseBody:表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。


Maven的pom.xml中依赖如下:



    4.0.0
    
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
    

    com.inverseli.springboot
    inverseli-springboot
    1.0-SNAPSHOT
    war

    
        
            org.springframework
            spring-webmvc
            4.3.7.RELEASE
        
        
            com.jolbox
            bonecp-spring
            0.8.0.RELEASE
        
        
        
            org.springframework.boot
            spring-boot-starter-web
            1.5.9.RELEASE
        
    

    
        
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                1.5.9.RELEASE
            
        
    



在其中并没有配置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的位置(启动类位置很重要)

SpringBoot入门_第1张图片
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!";
    }
}

结果:

SpringBoot入门_第2张图片
result.png

你可能感兴趣的:(SpringBoot入门)