私は最近、大きな一歩を踏み出し、すべてを Java ベースの構成に移行したいと考えていました。今まで完璧に機能しました。問題は 1 つだけです。
Spring のこの WebApplicationInitializer Interface があります。これは、実際には最初の web.xml の代替案でした。
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
より良いことに、この素晴らしい AbstractAnnotationConfigDispatcherServletInitializer クラスがあります。これは、構成ファイル (Dispatcher など) がすべて Java ベースである場合に使用するのにさらに最適です。
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { MyWebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
また、ディスパッチャがまだ xml でスタックしている場合は、その XML バージョンも表示されます。
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
@Override
protected WebApplicationContext createServletApplicationContext() {
XmlWebApplicationContext cxt = new XmlWebApplicationContext();
cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
return cxt;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
今私の質問は次のとおりです。私は主にJavaベースの構成ファイルを持っているので、2を使用していAbstractAnnotationConfigDispatcherServletInitializer
ます。しかし、抽象クラスを変更せずに登録したい XML ファイル (Spring Security 用) が 1 つあります。この場合、インターフェイスWebApplicationInitializer
(1.ケース) がこれに対する唯一の現在の解決策です (または解決策になる可能性があります)? または、1. ケースを使用せずに、または 2 つのWebApplicationInitializer
クラス (1AbstractAnnotationConfigDispatcherServletInitializer
と 1 AbstractDispatcherServletInitializer
) を作成せずにこれを達成する別の方法はありますか?