• @SpringBootApplication


    1、@SpringBootApplication 等价于 @Configuration+@EnableAutoConfiguration+@ComponentScan,且他们均使用默认属性。如:

    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

    等价于

    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

    2、@SpringBootApplication 源码

    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
            @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    @ConfigurationPropertiesScan
    public @interface SpringBootApplication {
    
        /**
         * Exclude specific auto-configuration classes such that they will never be applied.
         * @return the classes to exclude
         */
        @AliasFor(annotation = EnableAutoConfiguration.class)
        Class<?>[] exclude() default {};
    
        /**
         * Exclude specific auto-configuration class names such that they will never be
         * applied.
         * @return the class names to exclude
         * @since 1.3.0
         */
        @AliasFor(annotation = EnableAutoConfiguration.class)
        String[] excludeName() default {};
    
        /**
         * Base packages to scan for annotated components. Use {@link #scanBasePackageClasses}
         * for a type-safe alternative to String-based package names.
         * <p>
         * <strong>Note:</strong> this setting is an alias for
         * {@link ComponentScan @ComponentScan} only. It has no effect on {@code @Entity}
         * scanning or Spring Data {@link Repository} scanning. For those you should add
         * {@link org.springframework.boot.autoconfigure.domain.EntityScan @EntityScan} and
         * {@code @Enable...Repositories} annotations.
         * @return base packages to scan
         * @since 1.3.0
         */
        @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
        String[] scanBasePackages() default {};
    
        /**
         * Type-safe alternative to {@link #scanBasePackages} for specifying the packages to
         * scan for annotated components. The package of each class specified will be scanned.
         * <p>
         * Consider creating a special no-op marker class or interface in each package that
         * serves no purpose other than being referenced by this attribute.
         * <p>
         * <strong>Note:</strong> this setting is an alias for
         * {@link ComponentScan @ComponentScan} only. It has no effect on {@code @Entity}
         * scanning or Spring Data {@link Repository} scanning. For those you should add
         * {@link org.springframework.boot.autoconfigure.domain.EntityScan @EntityScan} and
         * {@code @Enable...Repositories} annotations.
         * @return base packages to scan
         * @since 1.3.0
         */
        @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
        Class<?>[] scanBasePackageClasses() default {};
    
        /**
         * Specify whether {@link Bean @Bean} methods should get proxied in order to enforce
         * bean lifecycle behavior, e.g. to return shared singleton bean instances even in
         * case of direct {@code @Bean} method calls in user code. This feature requires
         * method interception, implemented through a runtime-generated CGLIB subclass which
         * comes with limitations such as the configuration class and its methods not being
         * allowed to declare {@code final}.
         * <p>
         * The default is {@code true}, allowing for 'inter-bean references' within the
         * configuration class as well as for external calls to this configuration's
         * {@code @Bean} methods, e.g. from another configuration class. If this is not needed
         * since each of this particular configuration's {@code @Bean} methods is
         * self-contained and designed as a plain factory method for container use, switch
         * this flag to {@code false} in order to avoid CGLIB subclass processing.
         * <p>
         * Turning off bean method interception effectively processes {@code @Bean} methods
         * individually like when declared on non-{@code @Configuration} classes, a.k.a.
         * "@Bean Lite Mode" (see {@link Bean @Bean's javadoc}). It is therefore behaviorally
         * equivalent to removing the {@code @Configuration} stereotype.
         * @since 2.2
         * @return whether to proxy {@code @Bean} methods
         */
        @AliasFor(annotation = Configuration.class)
        boolean proxyBeanMethods() default true;
    
    }

    如:不装配指定类

    @SpringBootApplication(exclude={com.ebc.User.class})

    3、关系

  • 相关阅读:
    安装MySQL-python时报错
    人的成功平台很重要
    开源运维工具
    遗忘Windows Server 2008R2密码的处理方法
    操作系统下载和操作系统更新失败解决
    说说对SQL 语句优化有哪些方法?
    Git彻底删除历史提交记录的方法
    MSSQL备份脚本
    .NET Core Data Access
    各种数据库默认端口总结
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/11705950.html
Copyright © 2020-2023  润新知