Spring boot - @Component注解创建两个相同类型的bean

Spring boot - @Component Annotation creates two beans of same type

当我将 @Component 注释添加到 class 时,它会创建两个相同类型(class 类型)的 bean,但我收到一个错误,指出没有唯一的 bean 标识符。

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

我看不到另一个 bean 的创建位置。

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

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 bean:

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

    @Autowired
    private UserRepository repo;

    @Autowired
    private ServiceConfiguration config;
    ...
}

但是,在我的 Eclipse IDE 的包资源管理器中,我看到在 Spring Elements -> Beans -> @Component 注释下,有两个 main.serviceconfiguration.ServiceConfiguration

一个叫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

真奇怪。

你可以做的是强制为组件命名,例如 @Component("foo") 然后连同 @Autowired 添加 @Qualifier("foo")

虽然这并没有解决根本原因。

@EnableConfigurationProperties(ServiceConfiguration.class) 已经创建了该类型的 bean。通常,您在此处显示的所有 classes 上都有重复的注释,这是不必要的。例如,为什么你的 class 上有 @Controller@Service?一个就够了。而且如果是controller,应该不是配置class,所以应该去掉注解@Configuration.