【发布时间】:2011-10-04 18:07:20
【问题描述】:
我有一个场景configuring Spring Security on embedded Jetty,如果我使用 JavaConfig 来配置 Jetty 服务器,似乎可以解决这个问题。
因此,对于大型项目来说,JavaConfig 而不是 XML 可能是更好的选择。但是,XML 命名空间中有一些细节,例如 <context:component-scan />,这些细节在 @Configuration 设置中并不容易获得。
我发现ApplicationContextAware 是@Configuration 类的荣誉,所以以下是可能的
@Configuration
public class FooConfig implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
((AnnotationConfigApplicationContext) applicationContext).scan("org.example");
}
}
替代方法是documented,是让@Configuration 类使用@ImportResource 注释并拉入现有的XML 文件:
@Configuration
@ImportResource("applicationContext-withComponentScan.xml")
public class BarConfig {}
我想问题是“以这种方式滥用ApplicationContextAware 是不好的形式,还是真的不是滥用”?这种方法让人感觉有些奇怪,所以如果 Spring 的家伙以某种我没有发现的方式涵盖了这个,我不会感到惊讶。
对于感兴趣的人,问题与扫描带有 @Resource 和 @Provider 类的 Jersey 设置有关,我宁愿不必手动管理类/XML 配置中的条目。
【问题讨论】: