我相信@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
答案 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/