@Bean

一、以下例,在构建A-bean的方法中直接调用了构建了B-bean方法,不管A先仍是B先被容器初始化,只会自动注入惟一的那个B-bean!java

@Bean
    public LogInterceptor logInterceptor() {
        return new LogInterceptor(handler(environment));
    }

    @Bean
    public ILogHandler handler(Environment environment) {
        KafkaLogHandler kafkaLogHandler = new KafkaLogHandler(environment);
        return kafkaLogHandler;
    }

执行堆栈:spa

能够明显的看出,当执行B-bean构建方法时,将跳转BeanMethodInterceptor.intercept !  经过cglib来作子类代理扩展。.net


二、@Bean默认使用方法名做为容器对象的beanName, 方法参数默认使用arg名, byName后byType!  找不到唯一则报错:
代理

解决方法: code

  1. @Primary 修饰指定优先的bean构建方法
  2. 在入参用@Qualifier指定name的bean
相关文章
相关标签/搜索