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

    评论

报告相同问题?

悬赏问题

  • ¥30 软件自定义无线电该怎样使用
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下