有了上一节内容的铺垫,这个问题实际上已经很清楚了——是否会被GC取决于两点:1.Bean的作用域;2.Spring容器的状态。这里先给出结论:
- singleton 类型的 Bean 不会被 GC,当然,前提是 Spring 容器处于运行中,如果 Spring 容器被关闭,那么相关 Bean 也会被回收;
- prototype 类型的 Bean 会被 GC,这种类型的 Bean 与程序中的 new关键字生成的对象类似,每次使用都 new 一个,使用完就回被回收;
- new 关键字生成的对象,在程序中会通过 new 关键字生成对象,这些对象与 Spring 容器没有直接关系,本质上就是一个普通的Java 对象,当这个对象米有引用时即被 JVM 回收。