在DefaultListableBeanFactory中,您具有公共方法destroySingleton(“
beanName”),因此可以使用它,但是您必须知道,如果您自动装配了bean,它将保留最初自动装配的对象的相同实例。可以尝试这样的事情:
@RestControllerpublic class MyRestController { @Autowired SampleBean sampleBean; @Autowired ApplicationContext context; @Autowired DefaultListableBeanFactory beanFactory; @RequestMapping(value = "/ ") @ResponseBody public String showBean() throws Exception { SampleBean contextBean = (SampleBean) context.getBean("sampleBean"); beanFactory.destroySingleton("sampleBean"); return "Compare beans " + sampleBean + "==" + contextBean; //while sampleBean stays the same contextBean gets recreated in the context } }
它不是很漂亮,但显示了如何实现它。如果要处理的是控制器而不是组件类,则可以在方法参数中进行注入,并且它也可以工作,因为直到在方法内部需要时才重新创建Bean,至少看起来是这样。有趣的问题是,除了首先将其自动连线到的对象外,还有谁还引用了旧Bean,因为已将其从上下文中删除,所以我想知道它是否仍然存在,或者是否在控制器中释放了该对象而进行了垃圾收集上面的内容,如果上下文中的某些其他对象引用了它,则上面的内容会引起问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)