我何时使用@Bean而不是@Component?

时间:2014-03-07 00:40:39

标签: spring dependency-injection

我对春天的一些事感到困惑。

首先,我什么时候想在一个带有@Bean的显式@Configuration类上使用@Component来实现@Component?

我能想到使用@Component的唯一原因是为了保存自己在@Configuration类中创建@Bean方法。还有其他原因吗?

那就是说,如果我使用@Configuration类,我似乎可以手工编写这些bean的接线代码。 IOW,我在@Component上使用@Inject我现在可以在@Bean构造函数中显式指定依赖项(当我在bean方法中创建它时)。那么我什么时候想使用@Inject?我觉得我要在这里挖一个兔子洞。

是否有任何好的教程或博客涵盖制定此类决策的最佳做法或规则?

谢谢

1 个答案:

答案 0 :(得分:8)

一个例子:

@Component
public class SomeComponent { }

以上将在实践中创建与:

相同
public class SomeComponent { }
@Configuration
public class SomeComponentConfig {
    @Bean
    public SomeComponent someComponent() {
        return new SomeComponent();
    }
}

@Component的优势很明显:代码更少!

另一方面,@Bean功能强大且有很多用例;例如,如果SomeComponent位于您无法编辑的现有库中,或者您只是不想使用Spring或@Inject注释来混淆它。