一、以下例,在構建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