@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
相關文章
相關標籤/搜索