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
.
当我将 @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
.