0

私はSpringと@Configurationスタイルがxmlベースの構成を取り除くのが本当に好きです。私はそれをサービスおよびリポジトリ層にうまく使用しています。私が気に入っているのは、依存性注入機能と JDO/JPA/Jdbc ユーティリティです!

私が実際に得ていないのは、Spring WebMVC がどのように機能するかです。私には制御不能な魔法が多すぎます。(そして @EnableAutoConfiguration を使用すると、さらに多くの魔法が導入されます。簡単なプロトタイピングには適していますが、保守は困難です)。

それが私のwebappを設定する方法です:

public class SpringWebBooter implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigApplicationContext rootContext = new AnnotationConfigApplicationContext();
        rootContext.register(SpringConfiguration.class); //main configuration class for all beans
        rootContext.refresh();

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.setParent(rootContext);
        ctx.register(SpringWebConfiguration.class); //web context configuration class

        ServletRegistration.Dynamic api = servletContext.addServlet("api", new DispatcherServlet(ctx));
        api.setLoadOnStartup(1);
        api.addMapping("/api/*");
    }

}

ここで、型コンバーターと httpMessageConverters を追加したいので、SpringWebConfiguration クラスで試しました。

@EnableWebMvc
@Configuration
@ComponentScan
public class SpringWebConfiguration {

    //works but feels very *magic*
    @Autowired
    public void configureConversionService(FormattingConversionService conversionService) {
        conversionService.addConverter(new PointConverter(GEOMETRY_FACTORY));
        conversionService.addConverterFactory(new StringToEnumConverterFactory());
    }

    //not working yet
    @Bean
    public MappingJackson2HttpMessageConverter createJsonMessageConverter() {
        ObjectMapper o = new ObjectMapper();
        o.enable(SerializationFeature.INDENT_OUTPUT);
        MappingJackson2HttpMessageConverter c = new MappingJackson2HttpMessageConverter();
        c.setObjectMapper(o);
        return c;
    }
}

ディスパッチャ サーブレットを構築するときに、タイプ コンバータとメッセージ コンバータを追加する方が直感的だと思います。これは、疑わしい自動配線や Bean の作成よりもはるかに明確です。Dispatcher Servlet が内部で Bean を取得することを常に「望んでいます」が、多くの場合、試行錯誤にすぎません。ディレクターの方法でSpring Mvcをセットアップすることは可能ですか? たとえば、より少ない魔法とより具体的なインスタンス化と #addHttpMessageConverter(...) 呼び出しで?

ExceptionResolvers、RequestHandler、RequestAdapter についても基本的に同じです。

1月

4

2 に答える 2

2

Web 構成用にWebMvcConfigurerAdapterを拡張すると、マジックが少し少なくなり、メッセージ コンバーターや他の多くのコンポーネントを構成するためのフックが得られるはずです。

    @Configuration
    @ComponentScan
    @EnableWebMvc
    public class WebConfiguration extends WebMvcConfigurerAdapter
    {
      @Autowired
      private CustomObjectMapper domainMapper;

      @Override
      public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
      {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(domainMapper);
        converters.add(converter);
        super.configureMessageConverters(converters);
      }

    }
于 2014-01-10T18:05:45.457 に答える