我有一个场景configuring Spring Security on embedded Jetty,如果我使用JavaConfig来配置Jetty服务器,这个问题似乎就解决了。
因此,对于大部分项目来说,JavaConfig看起来可能是更好的选择。但是,XML名称空间中有一些很好的地方,比如<context:component-scan />,这在@Configuration设置中是不容易获得的。
我发现,对于@Configuration类,ApplicationContextAware是受尊重的,因此以下是可能的
@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设置有关,我不希望手动管理class/XML配置中的条目。
发布于 2011-07-14 02:37:03
以这种方式滥用ApplicationContextAware是不好的形式,还是真的没有滥用
是的,这是不好的形式。如果您打算手动从上下文中获取内容,那么您最好从一开始就不要担心依赖项注入。
但是,第二个选项(@ImportResource("applicationContext-withComponentScan.xml"))是一个很好的选择-当您想要将这些XML宏与注释式配置结合使用时,这是当前的最佳实践。
第三种选择是使用Spring3.1的当前里程碑版本,它使用@Feature进行adds a way of doing these things all in Java。不过,这还没有准备好投入生产。
发布于 2012-10-02 11:27:49
现在Spring 3.1已经准备就绪,如果您使用的是Spring3.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
发布于 2012-06-17 20:36:45
也可以查看此链接。它更具体一些(对于web应用程序),但它有一个非常好的扫描代码示例,特别是:http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html
通过该链接:
@ComponentScan(basePackages = { "org.example"} )https://stackoverflow.com/questions/6683771
复制相似问题