当我将@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
一个被称为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
答案 0 :(得分:3)
这很奇怪。
您可以做的是强制组件的名称,例如@Component("foo")
然后与@Autowired
一起添加@Qualifier("foo")
但这并没有解决根本原因。
答案 1 :(得分:2)
@EnableConfigurationProperties(ServiceConfiguration.class)
已经创建了该类型的bean。通常,您在此处显示的所有类上都有重复的注释,这些都不是必需的。例如,为什么你的班级有@Controller
和@Service
?一个就够了。如果它是一个控制器,它不应该是一个配置类,所以你应该删除注释@Configuration
。