gpt4 book ai didi

java - spring如何将方法调用解析为bean?

转载 作者:行者123 更新时间:2023-11-29 03:04:58 24 4
gpt4 key购买 nike

考虑这段代码:

public class Bean1  {}

public class Bean2 {
private final Bean1 bean1;

public Bean2(Bean1 bean1){
this.bean1 = bean1;
}
}

@Configuration
public class MyConfiguration {
@Bean
public Bean1 bean1(){
return new AImpl();
}

@Bean
public Bean2 bean2() {
return new BImpl(bean1());
}

@Bean
public Bean3 bean3() {
return new BImpl(bean1());
}
}

我对 Java 的了解表明,bean2bean3 中对 bean1 的两个引用应该不同,因为我调用 bean1() 方法两次,应该创建两个不同的对象。

但是,在 Spring 下,在相同的 ApplciationContext 等中,bean2bean3 将对类 的相同对象具有相同的引用Bean1.

这在 Java 中怎么可能? Spring 使用什么机制允许它以某种方式拦截方法调用并将 beans 作为这些调用的结果?

最佳答案

带有 @Configurable 注释的类以特殊方式处理。他们是parsed using ASM并通过扫描创建特殊的 bean 定义。基本上每个 @Bean 注释都是一种特殊的工厂 bean。

因为这些方法被视为工厂 bean,所以它们只被调用一次(当然除非作用域不是单例)。

关于java - spring如何将方法调用解析为bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com