代码拉取完成,页面将自动刷新
同步操作将从 huifer/Code-Analysis 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
org.springframework.web.context.support.ServletContextScope
/**
* servlet 上下文
*/
private final ServletContext servletContext;
/**
* 摧毁方法容器
* key: name
* value: 摧毁方法
*/
private final Map<String, Runnable> destructionCallbacks = new LinkedHashMap<>();
@Override
public Object get(String name, ObjectFactory<?> objectFactory) {
// 从 servlet-context 根据name 获取实例
Object scopedObject = this.servletContext.getAttribute(name);
// 实例为空
if (scopedObject == null) {
// objectFactory 获取
scopedObject = objectFactory.getObject();
// 放入缓存
this.servletContext.setAttribute(name, scopedObject);
}
return scopedObject;
}
@Override
@Nullable
public Object remove(String name) {
// 从 servlet-context 根据name 获取实例
Object scopedObject = this.servletContext.getAttribute(name);
if (scopedObject != null) {
synchronized (this.destructionCallbacks) {
// 删除 name 对应的回调方法
this.destructionCallbacks.remove(name);
}
// 删除 servlet-context 中 name 对应的值
this.servletContext.removeAttribute(name);
// 返回删除对象
return scopedObject;
}
else {
return null;
}
}
@Override
public void registerDestructionCallback(String name, Runnable callback) {
synchronized (this.destructionCallbacks) {
this.destructionCallbacks.put(name, callback);
}
}
摧毁方法
执行所有的摧毁回调
@Override
public void destroy() {
synchronized (this.destructionCallbacks) {
for (Runnable runnable : this.destructionCallbacks.values()) {
runnable.run();
}
this.destructionCallbacks.clear();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。