《Springboot极简教程》使用@SpringBootAp

作者: 光剑书架上的书 | 来源:发表于2017-03-23 17:40 被阅读61次

    许多Spring Boot开发人员总是使用@Configuration,@EnableAutoConfiguration和@ComponentScan来标注它们的主类。 由于这些注释经常一起使用(特别是如果您遵循上述最佳实践),Spring Boot提供了一个方便的@SpringBootApplication替代方法。

    @SpringBootApplication注释相当于同时使用@Configuration,@EnableAutoConfiguration和@ComponentScan及其默认属性(重复注解,SpringBoot是怎么处理的?):

    package com.example.myproject;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication 
    /* same as */ 
    //@Configuration 
    //@EnableAutoConfiguration 
    //@ComponentScan
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    

    NOTE

    @SpringBootApplication alias 关联了注解: @EnableAutoConfiguration和@ComponentScan的属性。

    源码:

    /*
     * Copyright 2012-2015 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.springframework.boot.autoconfigure;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * Indicates a {@link Configuration configuration} class that declares one or more
     * {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration
     * auto-configuration} and {@link ComponentScan component scanning}. This is a convenience
     * annotation that is equivalent to declaring {@code @Configuration},
     * {@code @EnableAutoConfiguration} and {@code @ComponentScan}.
     *
     * @author Phillip Webb
     * @since 1.2.0
     */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public @interface SpringBootApplication {
    
        /**
         * Exclude specific auto-configuration classes such that they will never be applied.
         * @return the classes to exclude
         */
        Class<?>[] exclude() default {};
    
    }
    
    

    所以说,你也可以直接自己定于注解,来封装一些常用的注解。

    package com.restfiddle;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * Created by jack on 2017/3/23.
     *
     * @author jack
     * @date 2017/03/23
     */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public @interface RestBoot {
        Class<?>[] exclude() default {};
    }
    
    

    代码中可以这样用:

    /*
     * Copyright 2014 Ranjan Kumar
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package com.restfiddle;
    
    import org.springframework.boot.SpringApplication;
    
    /**
     * 应用入口类 main函数
     */
    
    //@Configuration
    //@EnableAutoConfiguration
    //@ComponentScan({"com.restfiddle"})
    //@SpringBootApplication
    @RestBoot
    public class RestFiddleApplication {
    
        public RestFiddleApplication() {
        }
    
        public static void main(String[] args) throws Exception {
            SpringApplication.run(RestFiddleApplication.class, args);
        }
    
    }
    

    相关文章

      网友评论

        本文标题: 《Springboot极简教程》使用@SpringBootAp

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