Spring @Component& @Bean注释

时间:2016-06-29 01:47:46

标签: spring spring-boot

我相信@Configuration注释在spring中与@Bean注释结合使用时,用于替换xml配置。但是我看到了一段代码@Bean@Component一起使用(在类级定义)。这是一个有效的声明吗?使用@Component @Bean注释与使用@Configuration@Bean时是否有任何利弊。

修改

谢谢@Sundar& @Biju。我在Component类下的2个bean方法之间进行了编程调用。我看到了不同的对象值。但是当我使用Configuration时,我看到了相同的bean值。基于您所解释的内容,我假设在使用@Component时进行了常规方法调用,而当我使用@Configuration时,我假设使用@Bean注释的方法被视为Spring Bean

代码

@Component
public class AppConfig {

    @Bean(name="customerService")
    public CustomerService getCustomerService(){
        System.out.println(getService());
        System.out.println(getService());
        return getService();
    }

    @Bean
    public CustomerService getService(){
        return new CustomerServiceImpl();
    }
}

控制台输出

com.company.service.CustomerServiceImpl@68bbe345
com.company.service.CustomerServiceImpl@30b8a058

代码

@Configuration
public class AppConfig {

    @Bean(name="customerService")
    public CustomerService getCustomerService(){
        System.out.println(getService());
        System.out.println(getService());
        return getService();
    }

    @Bean
    public CustomerService getService(){
        return new CustomerServiceImpl();
    }
}

控制台输出

com.company.service.CustomerServiceImpl@71623278
com.company.service.CustomerServiceImpl@71623278

2 个答案:

答案 0 :(得分:4)

这是一个有效的声明,但有捕获 - 1中的一个被称为精简模式,并且不能轻易地为这种形式声明的bean注入依赖关系。建议始终在@Component带注释的课程中使用@Bean - 这是一个很好的参考 - http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-java-basic-concepts

答案 1 :(得分:2)

您可以使用@Component作为@Configuration的替代方案。这是官方suggestion from spring team

只需在未使用@Bean注释的类上声明您的@Configuration方法(但通常使用另一个Spring构造型,例如@Component)。 只要您不在@Bean方法之间进行程序化调用,就可以正常使用,但条件适用*。

请参阅此链接中的更多信息。

http://dimafeng.com/2015/08/29/spring-configuration_vs_component/