Discuss / Java / 不会报异常

不会报异常

Topic source
@Configuration
@ComponentScan
public class AppConfig {
    @Bean
    ZoneId createZoneOfZ() {
        return ZoneId.of("Z");
    }

    @Bean
    ZoneId createZoneOfUTC8() {
        return ZoneId.of("UTC+08:00");
    }
}

Spring会报NoUniqueBeanDefinitionException异常,意思是出现了重复的Bean定义。

亲测不会报异常,如果错了,就修改下吧

1.系统启动的时候不会报错的,因为这两个bean的name不一样(bean name默认就是方法名称)

2.当通过bean name获取bean的时候也不会报错,例如:

SpringApplication springApplication = new SpringApplication(AnnotationApplication.class);ConfigurableApplicationContext context = springApplication.run(args);final ZoneId createZoneOfZ = (ZoneId)context.getBean("createZoneOfZ");final ZoneId createZoneOfUTC8 = (ZoneId)context.getBean("createZoneOfUTC8");System.out.println(createZoneOfZ+",---");System.out.println(createZoneOfUTC8+",---");

3.当通过type获取bean的时候,会报bean不唯一的异常

SpringApplication springApplication = new SpringApplication(AnnotationApplication.class);ConfigurableApplicationContext context = springApplication.run(args);final ZoneId createZoneOfZ = (ZoneId)context.getBean(ZoneId.class);System.out.println(createZoneOfZ+",---");

詹东东110

#3 Created at ... [Delete] [Delete and Lock User]

如果我们在@Configuration类中创建了多个同类型的Bean:Spring会报NoUniqueBeanDefinitionException异常,意思是出现了重复的Bean定义。

实际上不会报异常,因为创建多个同类型的bean如果不指定bean名,默认用方法名。

但是如果获取bean的时候不指定bean名称,而是使用类型,则会报上面的异常。

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

注入的时候就会报异常:

@Autowired
ZoneId zoneId;

注入时异常,是因为不知道选哪个bean,与楼主问题无关,也可以把变量名称改成Bean名称指定注入哪一个:

    @Bean
    ZoneId createZoneOfZ() {
        return ZoneId.of("Z");
    }

    @Bean
    ZoneId createZoneOfUTC8() {
        return ZoneId.of("UTC+08:00");
    }
@Autowiredprivate ZoneId createZoneOfZ;

  • 1

Reply