首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @Configuration和<context:component-scan />

Spring @Configuration和<context:component-scan />
EN

Stack Overflow用户
提问于 2011-07-14 02:31:21
回答 3查看 22.7K关注 0票数 14

我有一个场景configuring Spring Security on embedded Jetty,如果我使用JavaConfig来配置Jetty服务器,这个问题似乎就解决了。

因此,对于大部分项目来说,JavaConfig看起来可能是更好的选择。但是,XML名称空间中有一些很好的地方,比如<context:component-scan />,这在@Configuration设置中是不容易获得的。

我发现,对于@Configuration类,ApplicationContextAware是受尊重的,因此以下是可能的

代码语言:javascript
复制
@Configuration
public class FooConfig implements ApplicationContextAware {
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        ((AnnotationConfigApplicationContext) applicationContext).scan("org.example");
    }
}

另一种方法是使用documented,让@Configuration类使用@ImportResource注释并引入现有的XML文件:

代码语言:javascript
复制
@Configuration
@ImportResource("applicationContext-withComponentScan.xml")
public class BarConfig {}

我猜问题是“以这种方式滥用ApplicationContextAware是不好的形式,还是真的没有滥用”?这种方法让人感到奇怪的肮脏,所以如果Spring的家伙们以某种我没有注意到的方式报道了这一点,我也不会感到惊讶。

对于感兴趣的人来说,这个问题与扫描带有@Resource@Provider类的Jersey设置有关,我不希望手动管理class/XML配置中的条目。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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。不过,这还没有准备好投入生产。

票数 5
EN

Stack Overflow用户

发布于 2012-10-02 11:27:49

现在Spring 3.1已经准备就绪,如果您使用的是Spring3.1,那么您可以安全地使用@ComponentScan。作为过时的答案之一,它不仅仅适用于Spring MVC。您可以按如下方式使用它:

代码语言:javascript
复制
@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

票数 36
EN

Stack Overflow用户

发布于 2012-06-17 20:36:45

也可以查看此链接。它更具体一些(对于web应用程序),但它有一个非常好的扫描代码示例,特别是:http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html

通过该链接:

代码语言:javascript
复制
@ComponentScan(basePackages = { "org.example"} )
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6683771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档