在创建spring boot自动加载模块时,会使用到ApplicationContextInitializer和EnableAutoConfiguration,下面一一进行介绍
1. ApplicationContextInitializer
@FunctionalInterface
public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {
void initialize(C applicationContext);
}
用于在刷新之前初始化Spring ConfigurationApplicationContext的回调接口。
通常用于需要对应用程序上下文进行编程初始化的web应用程序中。例如,注册属性源或根据上下文环境激活配置文件。请参阅ContextLoader和FrameworkServlet支持,分别声明“contextInitializerClasses”上下文参数和init参数。
如果实例之间存在优先级的调用关系,我们鼓励ApplicationContextInitializer处理器通过实现Spring的Ordered接口或者使用@Order注解来进行处理。
2. EnableAutoConfiguration注解
启用Spring应用程序上下文的自动配置,尝试猜测和配置您可能需要的bean。自动配置类通常基于类路径和定义的bean来应用。例如,如果您的类路径上有tomcat-embedded.jar,则可能需要一个TomcatServletWebServerFactory(除非您定义了自己的ServletWebSServerFactory bean)。
使用@SpringBootApplication时,上下文的自动配置会自动启用,因此添加此注释不会产生额外的效果。
自动配置尝试尽可能智能化,并在您定义更多自己的配置时后退。您始终可以手动exclude()任何您不想应用的配置(如果您没有访问权限,请使用excludeName())。您也可以通过spring.autoconfigure.exclude属性排除它们。自动配置总是在用户定义的bean注册后应用。
用@EnableAutoConfiguration(通常通过@SpringBootApplication)注释的类的包具有特定的意义,通常用作“默认值”。例如,它将在扫描@Entity类时使用。通常建议您在根包中放置@EnableAutoConfiguration(如果您没有使用@SpringBootApplication),以便可以搜索所有子包和类。
自动配置类是常规的Spring @Configuration bean。它们是使用SpringFactoriesLoader机制定位的(针对这个类)。通常,自动配置bean是@Conditionalbean(最常用的是@ConditionalOnClass和@ConditionalOnMissingBean注释)。
网友评论