sping揭秘3Spring容器中bean默认是保持一个实例
Posted cutter_point
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sping揭秘3Spring容器中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揭秘3Spring容器中bean默认是保持一个实例的主要内容,如果未能解决你的问题,请参考以下文章