3

私は最近、大きな一歩を踏み出し、すべてを 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) を作成せずにこれを達成する別の方法はありますか?

4

1 に答える 1

3

例 2 では、MyWebConfig(クラス自体、どこにあるのか@Configuration...) で注釈を付けることができます@ImportResource

@ImportResourceJava 構成からインポートする xml 構成を指定する方法です。これは、Java と xml 構成を混在させる主要な方法の 1 つです。

リンクから:

@Import と同様に、このアノテーションは Spring XML の要素と同様の機能を提供します。これは通常、 @Configuration クラスが AnnotationConfigApplicationContext によってブートストラップされるように設計するときに使用されますが、名前空間などの XML 機能が必要な場合に使用されます。

于 2013-11-01T01:30:20.157 に答える