我想将两种配置合并为一种配置。以下是他们目前的看法:
@Configuration
@EnableWebMvc
@Import(...)
public class WebApplicationConfig extends WebMvcConfigurerAdapter {
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
//...
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//...
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
//...
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
//...
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//...
}
@EnableAsync
@EnableScheduling
@EnableTransactionManagement
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan(
basePackages = {"..."})
@Import({
...
})
@PropertySources({
@PropertySource("..."),
@PropertySource(
ignoreResourceNotFound = true,
value = "...")
})
@EnableWebSecurity
@Configuration
public class AdminConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//...
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
//...
}
我已经查看了Spring类层次结构,发现它们并没有以任何方式扩展相关的类。是否有替换它们的注释?这可以通过实现接口而不是扩展类来解决吗?
我想合并这些的原因是因为我想要一个配置,这样我就不必考虑在我测试我的应用时使用哪一个。
答案 0 :(得分:3)
我不建议将它们放在同一个班级。出于同样的原因,这是不可取的,因为您没有将所有逻辑塞入单个类中。保持您的配置简洁明了。更糟糕的是,这有时候真的会变得讨厌w /循环bean引用。
我建议你做一些作文来解决你的问题:
@Configuration
@Import({AdminConfig.class, WebApplicationConfig.class})
public class TheConfig {}
现在您可以参考TheConfig
。
或者,如果这只是测试,您可以将配置放在meta annotation上,例如:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ContextConfiguration(classes = {..})
public @interface TheTests { }
最后,如果你真的想要使用一个类,你可以这样做:
@EnableWebMvc
@Import(...)
@EnableAsync
@EnableScheduling
@EnableTransactionManagement
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan(
basePackages = {"..."})
@Import({
...
})
@PropertySources({
@PropertySource("..."),
@PropertySource(
ignoreResourceNotFound = true,
value = "...")
})
@EnableWebSecurity
@Configuration
public class TheConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {
...
}
此问题的另一个问题是WebMvcConfigurerAdapter
已提供,因此您无需在API中实施所有方法(仅限您需要的方法)。更重要的是它可以保护您免受可能添加方法的界面内的更改。
答案 1 :(得分:0)
最简单和最惯用的方法是使每个配置器成为顶级network_host_tests
类的静态嵌套类:
@Configuration
导入顶级类,Spring也将导入嵌套配置。