java - struts2的ExternalContext和InternalContext的用途是什么?

 fionafongkaian 发布于 2022-11-01 14:16

struts2源码中广泛出现的ExternalContext和InternalContext的用途是什么?

 T getInstance( Class type, String name, InternalContext context )
{
    ExternalContext previous = context.getExternalContext();
    Key key = Key.newInstance(type, name);
    context.setExternalContext(ExternalContext.newInstance(null, key, this));
    try {
        InternalFactory o = getFactory(key);
        if (o != null) {
            return getFactory(key).create(context);
        } else {
            return null;
        }
    } finally {
        context.setExternalContext(previous);
    }
}

这段代码是ContainerImpl中获取对象实例的方法. 其中InternalContext和ExternalContext很明显是一种策略模式, 提供一种具体策略供getFactory(key).create(context)使用, 但是我仍然不知道他们具体的作用是什么.

InternalContext的源码注释如下:

Internal context. Used to coordinate injections and support circular dependencies.

我直译过来就是"内部容器, 用来协调注入, 并且支持环行依赖"
ExternalContext的源码注释是:

An immutable snapshot of the current context which is safe to expose to client code.

当前上下文的一个不可改变且暴露在在客户端代码下也是安全的快照.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有