
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());
} }
最后我们看一下测试结果
果然如书中所料。。。