lkusmsulkm 2019-09-29 11:05 采纳率: 0%
浏览 455

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条回答

  • _鹿慕溪水 2019-09-29 11:12
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?