• SpringBoot 02: 初识SpringBoot


    1. SpringBoot

    产生原因

    • spring, springmvc框架使用上的一些缺点:

    • 需要使用的大量的配置文件

    • 还需要配置各种对象

    • 需要把使用的对象放入到spring容器中才能使用对象

    • 需要了解其他框架配置规则


    • springboot的一些直观优点:

    • SpringBoot就相当于简化了配置文件的Spring+SpringMVC(但springboot的核心还是IOC容器)

    • 常用的框架和第三方库都已经配置好了, 只需要引入使用即可

    特点

    • Create stand-alone Spring applications
    可以创建spring应用
    
    • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
    内嵌的tomcat, jetty, Undertow 
    
    • Provide opinionated 'starter' dependencies to simplify your build configuration
    提供了starter起步依赖, 简化应用的配置:   
    比如使用MyBatis框架, 需要在Spring项目中, 需要配置MyBatis的对象, SqlSessionFactory以及Dao的代理对象
    但在SpringBoot项目中, 只要在pom.xml里面加入一个mybatis-spring-boot-starter依赖
    
    • Automatically configure Spring and 3rd party libraries whenever possible
    尽可能去自动配置spring和第三方库, 叫做自动配置(就是把spring中的,第三方库中的对象都创建好,放到容器中,开发人员可以直接使用)
    
    • Provide production-ready features such as metrics, health checks, and externalized configuration
    提供了健康检查, 统计, 外部化配置
    
    • Absolutely no code generation and no requirement for XML configuration
    不用生成代码,不需要使用xml文件做配置
    

    2. SpringBoot项目

    地址

    @SpringBootApplication注解

    • 位于项目启动类上面,是复合注解, 包含以下注解
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan
    
    • 而@SpringBootConfiguration又是包含@Configuration的符合注解
    @Configuration
    public @interface SpringBootConfiguration {
        @AliasFor(
            annotation = Configuration.class
        )
        boolean proxyBeanMethods() default true;
    }
    
    //说明使用了@SpringBootConfiguration注解标注的类,可以作为配置文件使用的,可以使用Bean声明对象,注入到容器
    
    • @EnableAutoConfiguration
    启用自动配置,把java对象配置好,注入到spring容器中。例如可以把mybatis的对象创建好,放入到容器中
    
    • @ComponentScan
    扫描器,找到注解,根据注解的功能创建对象,给属性赋值等等。默认扫描的包:@ComponentScan所在的类,以及其所在类所在的包和子包。
    

    SpringBoot的配置文件

    • 名称:application
    • 后缀:property(key=value) 或 yml(key:value)
    • 配置文件示例:
    • 例1:application.properties设置端口和上下文
    #设置端口号
    server.port=9090
    
    #设置访问应用上下文路径,contextpath
    server.servlet.context-path=/myboot
    
    • 例2:application.yml,配置文件的结构更加清晰,推荐使用
    server:
      port: 9090
      servlet:
        context-path:/myboot
    

    多环境配置文件

    • 实际场景中,项目的配置会有开发环境,测试环境,上线的环境

    • 每个环境有不同的配置信息,例如端口,上下文,数据库url,用户名,密码等等

    • 使用多环境配置文件,可以方便的切换不同的配置

    • 使用方式:创建多个配置文件,名称规则:application-环境名称.properties(或者后缀未yml格式)

    • 多环境配置文件的示例如下:

    • 创建开发环境的配置文件:application-dev.properties(或者application-dev.yml )

    • 创建测试者使用的配置:application-test.properties

    • springboot默认读取application.properties文件,故需在该文件中配置实际需要读取的核心配置文件

    #以激活配置文件 application-dev.properties为例
    spring.profiles.active=dev
    

    @ConfigurationProperties

    • 设计思想:把配置文件的数据映射到java对象的属性上,将配置文件中某些开头和prefix指定的值相同的对应配置文件中的值赋给对应属性
    • 例如:application.properties
    #自定义key=value
    school.name=橘子
    school.website=www.test.com
    school.address=黑龙江哈尔滨
    
    • 则对应的实体类应该如下,其中name会被注入配置文件中的school.name的值,其他属性类似
    @Component
    @ConfigurationProperties(prefix = "school")
    public class SchoolInfo {
    
        private String name;
    
        private String website;
    
        private String address;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getWebsite() {
            return website;
        }
    
        public void setWebsite(String website) {
            this.website = website;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "SchoolInfo{" +
                    "name='" + name + '\'' +
                    ", website='" + website + '\'' +
                    ", address='" + address + '\'' +
                    '}';
        }
    }
    

    使用jsp

    • SpringBoot不推荐使用jsp, 而是使用模板技术代替jsp
    • 如果要使用jsp, 需要添加如下依赖,负责编译jsp文件
    <dependency>
        <groupId>org.apache.tomcat.embedgroupId>
        <artifactId>tomcat-embed-jasperartifactId>
    dependency>
    
    • 如果需要使用servlet, jsp, jstl的功能, 需要添加如下依赖
    <dependency>
    	<groupId>javax.servletgroupId>
    	<artifactId>jstlartifactId>
    dependency>
    
    <dependency>
    	<groupId>javax.servletgroupId>
    	<artifactId>javax.servlet-apiartifactId>
    dependency>
    
    <dependency>
    <groupId>javax.servlet.jspgroupId>
    	<artifactId>javax.servlet.jsp-apiartifactId>
    	<version>2.3.1version>
    dependency>
    
    • 创建一个存放jsp的目录, 一般为src/main/webapp目录,记得设置webapp的目录属性
    • 需要在pom.xml指定jsp文件编译后的存放目录:META-INF/resources
    <resource>
    	<directory>src/main/webappdirectory>
    	<targetPath>META-INF/resourcestargetPath>
    	<includes>
    		<include>**/*.*include>
    	includes>
    resource>
    
    • 创建Controller, 访问jsp
    • 在application.propertis文件中配置视图解析器
    #配置视图解析器
    spring.mvc.view.prefix=/
    spring.mvc.view.suffix=.jsp
    

    手动使用SpringBoot容器获取对象

    • 关注SpringBoot工程的主启动类的run方法
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
    • 关注上述run方法的返回值
    public static ConfigurableApplicationContext run(Class primarySource, String... args) {
        return run(new Class[]{primarySource}, args);
    }
    
    • 而ConfigurableApplicationContext是ApplicationContext的子接口
    public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
    }
    
    • 所以接收SpringBoot主启动类的run方法的返回值就可以获取到SpringBoot容器
    • 之后便可以按照需求调用SpringBoot容器的方法获取已经注册到容器中的对象

    CommandLineRunner接口 与 ApplcationRunner接口

    • 两个接口
    @FunctionalInterface
    public interface CommandLineRunner {
        void run(String... args) throws Exception;
    }
    
    @FunctionalInterface
    public interface ApplicationRunner {
        void run(ApplicationArguments args) throws Exception;
    }
    
    • 两个接口都有一个run方法
    • SpringBoot项目的主启动类实现上述接口,重写run方法,在容器对象创建好后自动执行run()方法
    • 可以在容器对象创建好后完成一些自定义的操作
  • 相关阅读:
    1.5 万字 + 40 张图解 HTTP 常见面试题
    git打tag和版本控制规范
    Java异常处理
    计算机毕设(附源码)JAVA-SSM楼盘销售管理系统
    three.js/webgl实现室内模型行走
    vxe-table导出方法以及排坑指南
    【Houdini】流体渲染流程(进阶版)-- learn from ysy
    RxSwift和Combine的相同点和使用例子
    Prophet模型的简介以及案例分析
    pytorch初学笔记(一):如何加载数据和Dataset实战
  • 原文地址:https://www.cnblogs.com/nefu-wangxun/p/16877101.html