将配置从调度程序servlet xml迁移到java类。我需要两者(java类和xml)吗?

时间:2015-10-08 07:34:27

标签: spring hibernate spring-mvc

以下是我的dispatcher-servlet.xml和配置类的代码:

我在哪里放置我的数据库配置和实体定义?

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        // Default view
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/home").setViewName("home");
    }

    @Bean
    public Filter basicMetricFilter() {
        return new PieRequestMetricsFilter();
    }
}

1 个答案:

答案 0 :(得分:3)

可以将这些配置放在MvcConfig中,但这不是一个好主意。更好的方法是为应用程序的每个体系结构方面定义一个配置,然后仅在每个配置中放置相关的配置。假设您有一个具有传统分层架构的Web应用程序。在此示例中,您将WebConfigMvcConfig类一样,如下所示:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.web")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        // Default view
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/home").setViewName("home");
    }

    @Bean
    public Filter basicMetricFilter() {
        return new PieRequestMetricsFilter();
    }
}

此外,您可以拥有包含与数据访问相关配置的RepositoryConfig,如下所示:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackges = "com.example.repository")
public class RepositoryConfig() {
    // put your datasource, entity manager, jdbc templates, tx managers here
}

要将这些配置连接在一起,不需要任何xml文件,例如dispatcher servlet或web.xml。您可以在此方案中定义用于定义父配置和子配置的WepApplicationInitializer,如下所示:

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { RepositoryConfig.class, SecurityConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}

WebApplicationInitializer是Spring MVC提供的接口,可确保检测到您的实现并自动用于初始化任何Servlet 3容器。名为WebApplicationInitializer的{​​{1}}的抽象基类实现通过简单地重写方法来指定servlet映射和AbstractDispatcherServletInitializer配置的位置,从而更容易注册DispatcherServlet。 有关详细信息,请参阅spring文档。