spring是如何保证注入的bean和方法调用得来的对象是一致的呢?求解
@Bean
    public Object o1() {
        System.out.println("o1");
        return new Object();
    }

    @Bean
    public Object o2(Object o1) {
        System.out.println(new Object() == new Object());
        System.out.println("注入的对象和直接调用的一样吗?" + (o1 == o1()));
        return new Object();
    }

在springboot下的输出:

o1

false

注入的方法和调用的一样吗?true

我的想法:初始化o1, 初始化o2注入o1, 在o2内部调用o1得到一个新的object, 比较得false

还是自己想到了,最后只有一种方法可以拦截上面的o1调用,那就是代理
下面是用@Configuration 注解的 BeanTest的代理类
class spring.BeanTest$$EnhancerBySpringCGLIB$$310664fb

1个回答

你这个问题,应该先了解一下spring的bean加载过程,在spring初始化的时候,扫描注解,把你代码中的对象o1的class加载进ioc容器,在调用bean o1的时候,spring利用java的反射机制,通过ioc容器的bean生成o1对象的实例。
参考:https://blog.csdn.net/linfujian1999/article/details/83309353

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问