我有一个场景configuring Spring Security on embedded Jetty,如果我使用JavaConfig配置Jetty服务器,这似乎有点解决。Spring @Configuration和<context:component-scan />
因此,它看起来像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
,或者是不是真的不能滥用”?对于这种方法,有些东西感觉很肮脏,所以如果春天的人们以某种方式覆盖了我没有发现的东西,我不会感到惊讶。
对于感兴趣的问题,该问题与使用@Resource
和@Provider
类来扫描Jersey设置有关,我不想手动管理类/ XML配置中的条目。
是,3.1提供了一些很好的光泽。但我并不是试图“从情境中获取东西”,而是将注意力放在情境中,所以不确定你是否理解正确。 scan(“package”)与(give或take)context:component-scan相同,而这样做的类特别是一个配置类。我仍然不安,但你的论点并不成立。奇怪的是,我通常对你的答案印象非常深刻,所以我期待着我已经错过了你的观点,而不是错过了我的观点:) – ptomli
@ptomli:是的,“从情境中获取东西”是不正确的。我指的是获取注入上下文的更一般的做法,(转换它),然后调用其中的方法。它将你的配置类与Spring SPI类联系起来,这不是很优雅。我仍然推荐选项2. – skaffman
是的,即使“加载一些XML来管理JavaConfig”似乎是错误的,但我认为这是因为3.0没有完全覆盖基础。我有一个与财产配置相同的问题,但奇怪的是不觉得这么奇怪。欢呼声,一如既往的恒星指导! – ptomli