【sping揭秘】3、Spring容器中bean默认是保持一个实例

时间:2023-03-09 18:39:58
【sping揭秘】3、Spring容器中bean默认是保持一个实例

Spring容器中bean默认是保持一个实例

这里做一个测试,基础代码

package cn.cutter.start.provider;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component; @Component(value="FXNewsProvider")
public class FXNewsProvider {
//做个变量用来监控2个对象bean之间的值是否一致,来确认是否是一个对象
private int testSpring; public FXNewsProvider() {
System.out.println("hello IOC");
++testSpring;
} public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("配置文件路径");
FXNewsProvider fxNewsProvider = (FXNewsProvider) ctx.getBean("fXNewsProvider");
} public int getTestSpring() {
return testSpring;
} public void setTestSpring(int testSpring) {
this.testSpring = testSpring;
} }

测试案例:

@Test
public void test2() { //测试spring的IOC容器中,默认是保持在IOC容器中只有一个实例
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:application-bean.xml");
FXNewsProvider fxNewsProvider = (FXNewsProvider) ctx.getBean("FXNewsProvider"); System.out.println("第一次获取值:" + fxNewsProvider.getTestSpring()); FXNewsProvider fxNewsProvider2 = (FXNewsProvider) ctx.getBean("FXNewsProvider");
System.out.println("第二次获取值:" + fxNewsProvider2.getTestSpring()); fxNewsProvider2.setTestSpring(998); if(fxNewsProvider2 == fxNewsProvider) {
System.out.println("两次对象一样,值为:" + fxNewsProvider.getTestSpring());
} else {
System.out.println(fxNewsProvider.getTestSpring());
System.out.println(fxNewsProvider2.getTestSpring());
} }

最后我们看一下测试结果

果然如书中所料。。。

【sping揭秘】3、Spring容器中bean默认是保持一个实例