EnableAutoConfiguration注解说明
Posted zhujunhuawoaini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EnableAutoConfiguration注解说明相关的知识,希望对你有一定的参考价值。
/* * Copyright 2012-2017 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.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.core.io.support.SpringFactoriesLoader; /** * Enable auto-configuration of the Spring Application Context, attempting to guess and * configure beans that you are likely to need. Auto-configuration classes are usually * applied based on your classpath and what beans you have defined. For example, if you * have @code tomcat-embedded.jar on your classpath you are likely to want a * @link TomcatServletWebServerFactory (unless you have defined your own * @link ServletWebServerFactory bean). * <p> * When using @link SpringBootApplication, the auto-configuration of the context is * automatically enabled and adding this annotation has therefore no additional effect. * <p> * Auto-configuration tries to be as intelligent as possible and will back-away as you * define more of your own configuration. You can always manually @link #exclude() any * configuration that you never want to apply (use @link #excludeName() if you don‘t * have access to them). You can also exclude them via the * @code spring.autoconfigure.exclude property. Auto-configuration is always applied * after user-defined beans have been registered. * <p> * The package of the class that is annotated with @code @EnableAutoConfiguration, * usually via @code @SpringBootApplication, has specific significance and is often used * as a ‘default‘. For example, it will be used when scanning for @code @Entity classes. * It is generally recommended that you place @code @EnableAutoConfiguration (if you‘re * not using @code @SpringBootApplication) in a root package so that all sub-packages * and classes can be searched. * <p> * Auto-configuration classes are regular Spring @link Configuration beans. They are * located using the @link SpringFactoriesLoader mechanism (keyed against this class). * Generally auto-configuration beans are @link Conditional @Conditional beans (most * often using @link ConditionalOnClass @ConditionalOnClass and * @link ConditionalOnMissingBean @ConditionalOnMissingBean annotations). * * @author Phillip Webb * @author Stephane Nicoll * @see ConditionalOnBean * @see ConditionalOnMissingBean * @see ConditionalOnClass * @see AutoConfigureAfter * @see SpringBootApplication */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; /** * Exclude specific auto-configuration classes such that they will never be applied. * @return the classes to exclude */ 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 */ String[] excludeName() default ;
Spring Boot 自动装配机制的核心是 @EnableAutoConfiguration、@Conditional*、SpringFactoriesLoader
以上是关于EnableAutoConfiguration注解说明的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot 高级 原理分析 -- @EnableAutoConfiguration 注解
springboot注解之:@EnableAutoConfiguration
@EnableAutoConfiguration和@SpringbootApplication注解
SpringBoot 单元测试不使用 Application 类中的 @EnableAutoConfiguration 注解