• Spring Boot(一) 初步理解Spring Boot


      一、Spring Boot所解决的问题

      Java开发十分笨重:繁多的配置、低下的开发效率、复杂的部署流程以头疼的第三方技术集成。

      Spring Boot的理念:习惯优于配置——项目中存在大量的配置,此外还内置一个习惯性配置,免除了繁冗的手动配置,这样让基于Spring框架的项目快速运行起来。

      总结

      优点:

      (1)快速构建项目;

      (2)对主流开发框架的无配置集成;

      (3)项目可独立运行,无需依赖waibuServlet容器(因为内部有集成?)

      (4)提供运行时的应用监控;

      (5)极大提高开发、部署效率;

      (6)与云计算天然集成;

      缺点:

      (1)文档资料少;

      (2)若你不喜欢Spring,那也很无奈。

      二、快速入门 

      2.1 Spring Boot的环境搭建(均在Maven的pom.xml中添加)

      (1)设置Spring Boot的parent(实际上,这是一个依赖组合)

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.0.RELEASE</version>
    </parent>

      (2)导入Spring Boot的web支持

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

      (3)添加Spring Boot的插件

    <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
    </plugins>

    **提示:以上的标签元素注意要放在正确的父元素下  

      2.2 Spring Boot的核心注解

      @SpringBootApplication,用来开启自动配置(相当于一键部署)。

      2.3 启动Spring Boot项目的方式

      (1)run Java Aplication

      (2)通过Spring Boot的Maven插件运行(在搭建环境时配置好的插件,貌似是Maven Build,具体如下图)

      

      四、Spring Boot的核心

      一个基于Spring Boot的Hello程序:

    @SpringBootApplication
    @Controller
    @SpringBootConfiguration
    public class App 
    {
        public static void main( String[] args )
        {
            ApplicationContext ctx= SpringApplication.run(App.class,"-Ddebug=true");
            String[] beanNames=ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for(String beanName:beanNames){
                System.out.println(beanName);
            }
        }
    
        @RequestMapping("hello")
        @ResponseBody
        public String hello(){
            return "Share Biguo";
    
        }
    }

      4.1 入口类和@SpringBootApplication

      Spring Boot的项目一般都会有Application的入口类(入口类中会有main方法),这是一个标准的Java应用程序的入口方法。

      @SpringBootApplication,是Spring Boot的核心注解,实际上,它是一个组合注解(即一个顶多个),就是这个注解的定义处,头上有多个注解。

      (1)@SpringBootConfiguration

        这是SpringBoot项目的配置注解,也是一个组合注解(不用想,肯定包含了@Configuration(Spring的配置注解)),所以在Spring Boot的项目中,推荐使用@SpringBootConfiguration替代@Configuration。

      (2)@EnableAutoConfiguration

        启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项。(根据你的现有的配置自动添加其他你必需的配置,jar包,tomcat等)

      (3)@ComponentScan

        默认扫描@SpringBootApplication注解所在类的同级目录(就是类所在的Package)以及子目录。

      4.2 关闭一些不需要的自动配置

      因为Spring Boot自动配置后,添加的jar包等资源十分庞大,其中有很多我们并不需要。

      比如我们想关闭某一项的自动配置,例如,不需要Spring Boot自动帮我配置Redis,想手动配置:

    @Controller
    @SpringBootApplication(exclude={RedisAutoCnfiguration.class})
    @Configuration
    public class HelloApplicaiton{
      //***          
    }

       其它配置类似,相关的配置类是可以在相关的jar包中查看的。

      4.3 自定义Banner(ch06 16min)

      www.patorjk.com

      4.4 全局配置文件

      Spring Boot使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径的/config下。一般放到rsources下。

      在这个配置文件中,可以自定义一些配置:例如修改工程的访问端口;前端控制器的映射url等.

      总之非常非常多,涉及到了Spring的各个方面.

      4.5 Starter pom

      Spring Boot为我们提供了简化企业级开发绝大多数场景的Starter pom, 只要使用了应用场景所需要的Starter pom, 相关的技术配置将会消除,就可以得到Spring Boot为我们提供的自动配置的Bean。

      查看官方提供的pom, 了解每种pom的应用场景。

      随着SpringBoot的发展, 也有越来越多的第三方在组织提供Starter pom。

      

      4.6 XML配置

      Spring Boot试图全面用Java配置(注解) 来取代XML配置,但在实际项目中, 有一些特殊的要求必须使用xml配置。

      这时我们可以使用Spring的注解@ImportResource 来加载xml配置。

    @ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

      

      4.7 日志

      Spring Boot对各种日志框架都做了支持,可以通过在全局配置文件application.properties中改动,来修改默认的日志配置。

       五、Spring Boot自动配置的原理

      Spring Boot在进行SpringApplicaiton对象的实例化时会加载META-INF/Spring.factories(好像很多jar包中都有这个文件夹和文件)文件,将该配置文件中的配置加载到Spring容器。

       

    5.1 Maven下载源码

      通过dependency:sources命令,下载该项目中所有的依赖的包的源码。

      通过源码学习Spring Boot的处理流程(我还没理解)。

      

      5.2 条件注解@ConditionalOnXXX

      @ConditionalOnBean:当容器里有指定的Bean的条件下

      @ConditionalOnClass:当类路径下有指定的类的条件下

       很多很多!

  • 相关阅读:
    如何学习自动化测试?
    Jenkins中,执行py文件,python找包的路径(找不到自定义包的问题解决)
    数据库的架构设计
    iOS密码框的实现方式
    UISearchController 的大坑
    <第三方>TGRefreshO按照QQ的刷新方式下拉刷新
    关于项目颜色和字体的宏定义
    <iOS 导航栏>第一节:导航栏透明方法实现代码
    <iOS小技巧>UIview指定设置控件圆角
    关于这次KPL春季决赛的感悟
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/10019526.html
Copyright © 2020-2023  润新知