作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这段代码:
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 的了解表明,bean2
和 bean3
中对 bean1
的两个引用应该不同,因为我调用 bean1()
方法两次,应该创建两个不同的对象。
但是,在 Spring 下,在相同的 ApplciationContext 等中,bean2
和 bean3
将对类 的相同对象具有相同的引用Bean1
.
这在 Java 中怎么可能? Spring 使用什么机制允许它以某种方式拦截方法调用并将 beans 作为这些调用的结果?
最佳答案
带有 @Configurable
注释的类以特殊方式处理。他们是parsed using ASM并通过扫描创建特殊的 bean 定义。基本上每个 @Bean
注释都是一种特殊的工厂 bean。
因为这些方法被视为工厂 bean,所以它们只被调用一次(当然除非作用域不是单例)。
关于java - spring如何将方法调用解析为bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581680/
我是一名优秀的程序员,十分优秀!