Spring引导 - @Component Annotation创建两个相同类型的bean

时间:2015-08-20 16:01:04

标签: spring spring-mvc spring-boot javabeans spring-bean

当我将@Component批注添加到类中时,它会创建两个相同类型的bean(类类型),并且我得到一个错误,即没有唯一的bean标识符。

但是当我删除@Component注释时,我只得到一个bean。

我不知道另一个bean的创建地点。

这是我将@Component添加到的类:

package main.serviceconfiguration;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
/* prefix of key in application.properties*/
@ConfigurationProperties("")
public class ServiceConfiguration {

    /* declare key suffixes here */

    /* Then add getters and setters for the keys' values */
}

我在哪里@Autowire the bean:

@Controller
@Service
@Configuration
@RequestMapping("/users")
@EnableConfigurationProperties(ServiceConfiguration.class)
public class UserRestController {

    @Autowired
    private UserRepository repo;

    @Autowired
    private ServiceConfiguration config;
    ...
}

但是,在Eclipse IDE的包浏览器中,我在Spring Elements下看到了 - >豆类 - > @Component注释,有两个类型为main.serviceconfiguration.ServiceConfiguration

的bean

一个被称为serviceConfiguration 另一个叫main.serviconfiguration.ServiceConfiguration

日志中的错误:

No qualifying bean of type [main.serviceconfiguration.ServiceConfiguration] is defined: expected single matching bean but found 2: serviceConfiguration,main.serviceconfiguration.ServiceConfiguration

2 个答案:

答案 0 :(得分:3)

这很奇怪。

您可以做的是强制组件的名称,例如@Component("foo") 然后与@Autowired一起添加@Qualifier("foo")

但这并没有解决根本原因。

答案 1 :(得分:2)

@EnableConfigurationProperties(ServiceConfiguration.class)已经创建了该类型的bean。通常,您在此处显示的所有类上都有重复的注释,这些都不是必需的。例如,为什么你的班级有@Controller@Service?一个就够了。如果它是一个控制器,它不应该是一个配置类,所以你应该删除注释@Configuration