做韩国护的网站,成都私人做网站建设的公司,logo在线设计标小智,wordpress音乐源码spring和spring我偶尔会混淆这两个概念-WebApplicationInitializer和ApplicationContextInitializer#xff0c;并希望描述它们中的每一个#xff0c;以便为我自己澄清它们。 我以前曾在这里写过有关WebApplicationInitializer的博客。 它仅在符合Servlet 3.0规范的Servlet容… spring和spring 我偶尔会混淆这两个概念-WebApplicationInitializer和ApplicationContextInitializer并希望描述它们中的每一个以便为我自己澄清它们。 我以前曾在这里写过有关WebApplicationInitializer的博客。 它仅在符合Servlet 3.0规范的Servlet容器中相关并提供了一个钩子以编程方式配置Servlet上下文。 这有何帮助您可以拥有一个可能没有任何web.xml文件的Web应用程序该文件通常在基于Spring的Web应用程序中用于描述根应用程序上下文以及称为DispatcherServlet的Spring Web前端控制器。 以下是使用WebApplicationInitializer的示例 public class CustomWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {Overrideprotected Class?[] getRootConfigClasses() {return new Class?[]{RootConfiguration.class};}Overrideprotected Class?[] getServletConfigClasses() {return new Class?[]{MvcConfiguration.class};}Overrideprotected String[] getServletMappings() {return new String[]{/};}
} 现在什么是ApplicationContextInitializer 。 本质上是在完全创建Spring应用程序上下文之前执行的代码。 使用ApplicationContextInitializer的一个好用例是按照以下方式以编程方式设置Spring环境配置文件 public class DemoApplicationContextInitializer implements ApplicationContextInitializerConfigurableApplicationContext {Overridepublic void initialize(ConfigurableApplicationContext ac) {ConfigurableEnvironment appEnvironment ac.getEnvironment();appEnvironment.addActiveProfile(demo);}
} 如果您有一个基于Spring-Boot的应用程序那么注册ApplicationContextInitializer非常简单 Configuration
EnableAutoConfiguration
ComponentScan
public class SampleWebApplication {public static void main(String[] args) {new SpringApplicationBuilder(SampleWebApplication.class).initializers(new DemoApplicationContextInitializer()).run(args);}
} 但是对于非Spring-Boot Spring应用程序而言它有些棘手如果它是web.xml的程序化配置则该配置遵循以下原则 public class CustomWebAppInitializer implements WebApplicationInitializer {Overridepublic void onStartup(ServletContext container) {AnnotationConfigWebApplicationContext rootContext new AnnotationConfigWebApplicationContext();rootContext.register(RootConfiguration.class);ContextLoaderListener contextLoaderListener new ContextLoaderListener(rootContext);container.addListener(contextLoaderListener);container.setInitParameter(contextInitializerClasses, mvctest.web.DemoApplicationContextInitializer);AnnotationConfigWebApplicationContext webContext new AnnotationConfigWebApplicationContext();webContext.register(MvcConfiguration.class);DispatcherServlet dispatcherServlet new DispatcherServlet(webContext);ServletRegistration.Dynamic dispatcher container.addServlet(dispatcher, dispatcherServlet);dispatcher.addMapping(/);}
} 如果它是正常的web.xml配置则可以通过以下方式指定初始化程序 context-paramparam-namecontextInitializerClasses/param-nameparam-valuecom.myapp.spring.SpringContextProfileInit/param-value
/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class
/listener 综上所述除了Initializer后缀之外WebApplicationInitializer和ApplicationContextInitializer都具有完全不同的目的。 Servlet容器在Web应用程序启动时使用WebApplicationInitializer并提供了一种以编程方式创建Web应用程序的方法替换web.xml文件而ApplicationContextInitializer提供了一个钩子用于在完全创建Spring应用程序上下文之前对其进行配置。 翻译自: https://www.javacodegeeks.com/2014/10/spring-webapplicationinitializer-and-applicationcontextinitializer-confusion.htmlspring和spring