springboot中多个bean设置相同名称

360 阅读1分钟

当springboot中存在多个同名称bean的时候,会出现以下几种情况:

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