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