当springboot中存在多个同名称bean的时候,会出现以下几种情况:
- 使用@Bean注解注入bean,在同一个配置类中,并使用其value属性指定beanName,在加载完第一个之后,会忽略第二个(并不一定按方法顺序,而是代码编译之后的顺序)
- 使用@Bean注解注入bean,在同一个配置类中,直接使用方法名称作为beanName,在参数个数不同的情况下,表现同1,参数个数相同(类型不一定相同)的情况下,会启动时异常
- 使用@Bean注解注入bean,在不同配置类中,并使用其value属性指定beanName,启动时会异常,并提升添加
spring.main.allow-bean-definition-overriding=true,该参数设置为true在有相同name的bean的时候会覆盖(也是只加载第一个忽略第二个,至于哪个是第一个,顺序不一定,@Order并不能指定顺序) - 使用@Bean注解注入bean,在不同配置类中,直接使用方法名称作为beanName,情况同3
- 使用注解模式(
@Service/@Component),无论是使用类名称作为默认的beanName还是通过注解参数指定beanName,都会在启动时异常,即便是添加spring.main.allow-bean-definition-overriding=true配置项也无法解决