美文网首页SpringBoot专题
03、SpringBoot应用程序主类

03、SpringBoot应用程序主类

作者: Albert_Yu | 来源:发表于2019-06-15 18:28 被阅读4次

    应用程序主类说明

      一般在书写SpringBoot项目的时候通常建议将应用程序主类放到其他类之上的根包中。@EnbaleAutoConfiguration注解通常放置在主类上,它隐式的定义了某些基本搜索包。 例如,如果您正在编写JPA应用程序,则@EnableAutoConfiguration注解类的包将用于搜索@Entity项。
    使用根包(root package)还可以使用@ComponentScan注释,而不需要指定basePackage属性(因为默认会扫描主类下所有的包)。 如果您的主类在根包中,也可以使用@SpringBootApplication注释。
    如下图所示:Application就是应用程序主类


    image.png

    Application.java文件将声明main方法以及基本的@Configuration。

    package com.yubin.springboot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * SpringBoot 主应用程序类
     *
     * @Author YUBIN
     * @create 2019-06-09
     */
    @ComponentScan // 开启包扫描
    @EnableAutoConfiguration // 开启自动配置
    @Configuration // 申明当前类为配置类
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    到这里也许你会询问,难道我的每一个应用程序都需要在应用程序主类上加上@EnableAutoConfiguration、@CompontScan、@Configuration这3个注解么,答案是否定的,SpringBoot提供了一个方便的@SpringBootApplication注解作为这个三个的替代方法。

    @SpringBootApplication // 相当于 @ComponentScan,@EnableAutoConfiguration,@Configuration这三个注解
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    @SpringBootApplication还提供了别名来定制@EnableAutoConfiguration和@ComponentScan的属性

    配置类

      Spring Boot支持基于Java的配置。虽然可以使用XML配置用SpringApplication.run(),但我们通常建议您的主source是@Configuration类。 通常,定义main方法的类也是作为主要的@Configuration一个很好的选择。

    (1)、导入其他配置类

      在实际项目中可能不会把所有的配置都放在一个配置类(用@Configuration注解的类)中,可能会分开配置。这时可以用@Import注解引用(@Import(value = {***.class}))。@Import注解可用于导入其他配置类。 或者,您可以使用@ComponentScan自动扫描所有Spring组件,包括@Configuration类。

    (2)、导入xml配置

      如果在你的项目中需要用到xml配置文件,或者你还不习惯java配置的方式,那么你可以通过在入口启动类上加上@ImportResource(value = { "路径" })或者使用@ImportResource(locations= { "路径" }),一样的效果,多个XML文件的话你可以用逗号“,”分隔,就这样轻而易举的引用XML配置。

    (3)、自动配置

      Spring Boot 会根据您添加的jar依赖关系自动配置您的Spring应用程序。例如,如果HSQLDB在您的类路径上,并且您没有手动配置任何数据库连接bean,那么我们将自动配置内存数据库。
    您需要通过将@EnableAutoConfiguration或@SpringBootApplication注解添加到您的一个@Configuration类中来选择自动配置。

    备注:你应该只添加一个@EnableAutoConfiguration注解。 我们通常建议您将其添加到主@Configuration类中。
    
    (4)、替代自动配置

      SpringBoot自动配置是非侵入式的,您可以随时定义自己的配置来替换自动配置。 例如,如果您添加自己的 DataSource bean,则默认的嵌入式数据库支持将会退回。(这是由于在原来的配置类注解了如@ConditianalOnMissingBean;当程序中存在你需要替代的自动配置类时,这个配置类将覆盖SpringBoot的自动配置)
    如果您需要了解当前有哪些自动配置,以及为什么,请使用--debug开关启动应用程序。 这将启用debug日志,并将自动配置日志记录到控制台。

    (5)、禁用指定的自动配置

      如果你发现正在使用一些不需要的自动配置类,可以使用@EnableAutoConfiguration属性来禁用它们。

    @ComponentScan // 开启包扫描
    @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) // 开启自动配置
    @Configuration // 申明当前类为配置类
    //@Import(value = {MyProperties.class})
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    如果类不在classpath路径上,则可以使用注释的excludeName属性,并指定全限定名(fully qualified name)。 最后,您还可以通过spring.autoconfigure.exclude属性控制要排除的自动配置类列表。
    备注:注解和使用属性(property)定义都可以指定要排除的自动配置类。

    相关文章

      网友评论

        本文标题:03、SpringBoot应用程序主类

        本文链接:https://www.haomeiwen.com/subject/hcfifctx.html