假设我有一个普通的应用程序,其中我正在使用ApplicationContext ApplicationContext=new FileSystemXmlApplicationContext(“bean.xml”)创建一个Spring应用程序上下文
现在,假设在这个bean.xml有Spring beanBean1
的bean定义,所以当我创建应用程序上下文时,Spring容器将为这个Bean1
实例化和初始化一个对象。
然后我有一个非Spring对象,它保存着对这个Spring bean的对象的引用。
现在,假设我使用appCtx关闭了应用程序上下文(ConfigurableApplicationContext)。关闭() 。
现在我的问题是:
Bean1
的对象会发生什么,一旦Spring的Application ationContext关闭,它会被垃圾收集吗?Bean1
的对象的引用,我仍然拥有这个对象还是指向这个的对象引用变量将变为NULL?Application Context
在引擎盖下使用HashMap
来存储bean,如果您在上面调用关闭()
,它将在这些HashMap
上调用Clear()
方法。正如您所知,当我们在HashMap
上调用Clear()
方法时,它只将null
分配给map条目
,因此如果有另一个对象引用这些对象,它们将存活。
所以你的问题是:
它似乎不会为空。
我有一个接口Coach和实现它的类TrackCoach,它有一个名为
getDailyWorkout();
我正在使用getBean()
从容器中对bean进行基本调用
这是一节主要课
public static void main(String[] args) {
//load spring configuration file
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// retrieve bean from spring container
Coach theCoach = context.getBean("myCoach", Coach.class);
//call methods on bean
System.out.println(theCoach.getDailyWorkout());
Object o = new Object();
o = theCoach;
System.out.println("this is Object before closing> "+o);
//close context
System.out.println("Closing context");
context.close();
System.out.println("After closing context");
System.out.println("this is a regular usage of bean reference> "+theCoach.getDailyWorkout());
System.out.println("this is Object AFTER closing> "+o);
Coach c = (Coach) o;
System.out.println("this is AFTER CASTING> "+c.getDailyWorkout());
}
输出如下
Jun 09, 2022 6:36:00 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6d9c638: startup date [Thu Jun 09 18:36:00 CEST 2022]; root of context hierarchy
Jun 09, 2022 6:36:00 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
Run for 20 min
this is Object before closing> com.juradent.springdemo.TrackCoach@69b0fd6f
Closing context
Jun 09, 2022 6:36:01 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@6d9c638: startup date [Thu Jun 09 18:36:00 CEST 2022]; root of context hierarchy
After closing context
this is a regular usage of bean reference> Run for 20 min
this is Object AFTER closing> com.juradent.springdemo.TrackCoach@69b0fd6f
this is AFTER CASTING> Run for 20 min
问题内容: 我有三个问题。 为了解释,我正在查看某人的代码,并注意到有时没有关闭。通常,Eclipse会警告您这是潜在的内存泄漏(我已修复)。但是,在Callable内部类中,没有警告。 编写代码的人都是经验丰富的Java开发人员,所以我首先想到的是它是故意的…但是可能是他们在编写代码时只是匆忙而忽略了它。 我的问题是: Eclipse为什么不突出显示这一点(可以通过以下问题的答案来回答)? 如果
编辑问题,以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。 我们知道:load with memory_order_acquire,store with memory_order_release但是,我发现用gcc4.8.2,open -O2时,抛出了一个编译错误,/usr/include/c/4 . 8 . 2/atomic:199:9:error:对于
问题内容: 我想知道当你使用注释方法时实际发生了什么?当然,我知道Spring将把该方法包装在Transaction中。 但是,我有以下疑问: 听说Spring创建了代理类?有人可以更深入地解释这一点。该代理类中实际包含什么?实际班级会怎样?我怎么能看到Spring创建的代理类 我还在Spring文档中读到: 注意:由于此机制基于代理,因此仅会拦截通过代理传入的“外部”方法调用。这意味着“自调用”
我正在处理xml,我需要每条记录发送一条消息,当我收到最后一条记录时,我关闭了kafka生产者,这里的问题是kafka生产者的发送方法是异步的,因此,有时当我关闭生产者时,它会拖曳我在某个地方读到过,我可以让制片人敞开心扉。我的问题是:这意味着什么,或者是否有更好的解决方案。 -编辑- 想象以下场景: 我们阅读标签并创建kafka生产者 对于每个元素,我们读取其属性,生成一个json对象并使用se
这个问题是关于布尔值而不是布尔值的(但我很想知道两者是否相同)。假设您有一个函数正在对数据执行多次检查,并且在每种情况下它都有特定的响应。您希望函数显示所有无效输入的大小写(以及它们无效的原因),因此您希望检查所有输入(而不仅仅是一个并停止和返回)。使用单个布尔值(如Boolean x=isValidEmail(String email))然后处理它是否无效并在未来的检查中重用x以使您不分配额外的
我不确定“页面遍历”是否发生在特殊的硬件电路中,或者页表是否存储在L2/L3高速缓存中,或者它们是否只驻留在主存中。