Spring @Configuration和
我有一个在嵌入式Jetty上配置Spring Security的场景,如果我使用JavaConfig来配置Jetty服务器,这似乎有点解决了。
因此,它看起来像JavaConfig而不是XML可能是项目大块的更好选择。 但是,XML命名空间中存在一些细节,例如 ,它们在
@Configuration
设置中不易获得。
我发现ApplicationContextAware
很适合@Configuration
类,因此可以实现以下function
@Configuration public class FooConfig implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) { ((AnnotationConfigApplicationContext) applicationContext).scan("org.example"); } }
记录的替代方法是让@Configuration
类使用@ImportResource
注释并@ImportResource
现有的XML文件:
@Configuration @ImportResource("applicationContext-withComponentScan.xml") public class BarConfig {}
我想这个问题是“以这种方式滥用ApplicationContextAware
是不好的forms,还是真的不滥用”? 对于这种方法来说,有点奇怪,所以如果spring的家伙以某种方式覆盖了这个我没有发现的东西,我也不会感到惊讶。
对于感兴趣的人来说,问题与使用@Resource
和@Provider
类扫描Jersey设置有关,我宁愿不必手动管理类/ XML配置中的条目。
以这种方式滥用ApplicationContextAware是不好的forms,还是真的没有滥用
是的,这是不好的forms。 如果你要手动从上下文中取出东西,你可能也不会首先考虑dependency injection。
但是,您的第二个选项( @ImportResource("applicationContext-withComponentScan.xml")
)是一个很好的选项 – 当您希望将这些XML宏与注释样式配置结合使用时,这是当前的最佳实践。
第三种选择是使用Spring 3.1的当前里程碑版本,它使用@Feature
添加了一种使用Java完成所有这些操作的方法。 但是,这还没有生产就绪。
现在Spring 3.1已经准备就绪,如果你在Spring 3.1上,你可以安全地使用@ComponentScan。 它不仅仅是Spring MVC作为过时的答案之一。 您可以按如下方式使用它:
@Configuration @ComponentScan({"com.foo.bar", "org.foo.bar"}) public class AppConfig{ /** config code */ }
这是文档http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/context/annotation/ComponentScan.html
也请查看此链接。 它更具体(对于Web应用程序),但它有一个非常好的扫描代码示例,特别是: http : //static.springsource.org/spring/docs/current/javadoc-api/org/springframework/网络/的servlet /配置/注解/ EnableWebMvc.html
从该链接:
@ComponentScan(basePackages = { "org.example"} )