栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021SC@SDUSC【软件工程应用与实践】Cocoon项目5——core文件夹分析(4)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021SC@SDUSC【软件工程应用与实践】Cocoon项目5——core文件夹分析(4)

2021SC@SDUSC

core文件夹分析(4)
  • CachingSourceFactory.java
    • 1、总结
    • 2、主要属性
    • 3、方法
  • 2、PartSource.java
    • 1、总结
    • 2、主要属性
    • 3、构造函数
    • 4、方法
  • 3、PartSourceFactory.java
    • 1、总结
    • 2、方法

CachingSourceFactory.java 1、总结

继承自object
实现了URIAbsolutizer, SourceFactory, BeanNameAware接口

这个类实现了一个代理,比如source缓存它包装的source的内容。 此实现可以在给定的时间段内缓存内容,或者直到外部事件使缓存的响应无效。

使用超时方法时,可以在两种单独的重新验证策略之间进行选择:
①同步——这意味着检查缓存内容的有效性并在当前线程上抛出。
②异步——创建一个可运行的任务来使后台中的缓存响应无效并更新。

该工厂根据包装的 Source 是否是 TraversableSource 的实例来创建 CachingSource 或 TraversableCachingSource 的实例。
为了在 Cocoon 中使用 CachingSourceFactory,必须将其设置为 Spring bean。 为此,可以使用带有名称的抽象 bean 定义。

2、主要属性
//协议前缀/工厂名
protected String scheme;
//Cocoon 服务经理
protected ServiceManager serviceManager;
//有效性策略实施
protected CachingSourcevalidityStrategy validityStrategy;
3、方法
public Source getSource(final String location, final Map parameters)
  • 获取source对象
  • 流程:剪断缓存协议、解析查询字符串、将缓存源特定的查询字符串参数放入一个 Parameters 对象中
 protected CachingSource createCachingSource(String uri, 
          String wrappedUri,Source wrappedSource,
          int expires,String cacheName,boolean fail)
          throws SourceException
  • 创建了一个新的缓存source,可以在子类中覆盖
  • 调用选定的 Avalon 生命周期接口,并用refresher安排它,当想要使用异步source且过期参数 > 0 时,请确保正确注入 SourceRefresher

URIAbsolutizer接口的实现

public String absolutize(String baseURI, String location)
  • 当 SourceFactory 支持将相对 URI 应用于基本 URI 以形成绝对 URI 时实现该接口
  • 如果 SourceFactory 没有实现此接口,则将使用标准算法。这个接口只需要为具有不同行为的source类型实现

设置依赖

public void setCache(Cache cache)
  • 对缓存实现的强制性依赖
public void setValidityStrategy(CachingSourcevalidityStrategy validityStrategy)
  • 对 CachingSourcevalidityStrategy 实现的强制性依赖
public void setServiceManager(ServiceManager serviceManager)
  • 对serviceManager实现的强制性依赖
public void setSourceResolver(SourceResolver resolver)
  • 对resolver实现的强制性依赖
public void setAsync(boolean async)
  • 可选属性source是否是异步的,默认值为 false
public void setDefaultExpires(int expires)
  • 可选属性以秒为单位的默认到期时间, 默认值为 -1,这意味着它永远有效

补充:三种依赖关系

  1. 强制性依赖关系:是合同所要求的或工作本身的内在性质所决定的依赖关系,在排列活动顺序过程中,项目团队应明确哪些依赖关系属于强制性的.它往往与客观限制条件有关,强制性依赖关系又称硬逻辑关系

  2. 选择性依赖关系:是基于具体应用领域的最佳实践,来确定选择性依赖关系;或者,项目的某种特殊性也可能决定最好采用某种顺序,即便还有其他顺序可用,应该对选择性依赖关系进行全面记录,因为它们会影响总浮动时间,并限制后续的进度计划,如果打算进行快速跟进,则应当审查相应的选择性依赖关系,并考虑是否需要加以更改或消除

  3. 外部依赖关系:是项目活动与非项目活动的依赖关系,这些依赖关系往往不在项目团队的控制范围内

BeanNameAware接口的实现:

public void setBeanName(String beanName)
  • 在创建此 bean 的 bean 工厂中设置 bean 的名称,在填充普通 bean 属性之后但在初始化回调
  • 由想要在bean工厂中知道其 bean名称的bean实现的接口。
  • 注意,通常不建议对象依赖于它的 bean 名称,因为这表示对外部配置的潜在脆弱依赖,以及对 Spring API 的可能不必要的依赖
2、PartSource.java 1、总结

继承自object
实现了source接口

实现从上传文件时请求中保存的 PartonDisk 或 PartInMemory 获取其内容的 Source

2、主要属性
//持有对用于调用source的协议的私有引用
private String protocol
//持有对完整 uri 的私有引用
private String uri;
//持有已上传部分的私人引用
private Part part;
3、构造函数
//通过给定 URI 构建 PartSource
public PartSource(String uri, Map objectModel) throws MalformedURLException, SourceException
    {// 设置用于 getURI() 的 uri
        this.uri = uri;
        int position = uri.indexOf(':') + 1;
        if (position != 0)
        { // 设置在 getScheme() 中使用的协议
            this.protocol = uri.substring(0, position-1);}
        else
        { //如果 URI 的格式不正确,则抛出异常
            throw new MalformedURLException("No protocol found for part source in " + uri); }
        //获取请求参数名称:后面的位
        String location = uri.substring(position + 2);
        //从对象模型中获取cocoon请求
        Request request = ObjectModelHelper.getRequest(objectModel);
        // 尝试将请求对象转换为Part
        Object obj = request.get(location);
        if (obj instanceof Part)
        {  part = (Part) obj;}
        else
        {throw new SourceException("Request object " + location + " is not an uploaded Part");
        }
      }
4、方法
public InputStream getInputStream() throws SourceNotFoundException
  • 返回一个 InputStream 以从source读取,不能为null。 这是调用此方法时的数据,因此如果这是可修改的,可能会从两个不同的调用中获得不同的内容。返回的流必须由调用代码关闭
public boolean exists()
  • 如果资源存在则返回true
public long getContentLength()
  • 获取此source内容的内容长度,如果长度未知,则获取 -1
public long getLastModified()
  • 获取此source的最后修改日期,如果未知则为 0
public String getScheme()
  • 返回 URI 方案标识符,即 URI 中第一个 ‘:’ 之前的部分
3、PartSourceFactory.java 1、总结

继承自object
实现了SourceFactory, Contextualizable, ThreadSafe接口

基于部件的源的工厂:
SourceFactory:用于使用新的 URI 方案扩展源解析机制。 添加了一个新的SourceFactory以处理特定的协议。 SourceResolver 将包含这个新方案的 URI 的处理委托给工厂,工厂可以创建相应的 Source对象

2、方法
public Source getSource(String uri, Map parameters) throws IOException
  • 获取一个 Source 对象。
  • 参数:
    1. location -要解析的 URI - 此 URI 包括方案
    2. ②parameters - 驱动 Source 对象创建的附加命名参数(可选,可以为 null),每个实现都必须指定它接受的参数
  • 工厂创建了一个可供应用程序使用的新 Source 对象。 但是,当不再需要此源对象时,必须使用 release(Source) 方法再次释放它。 这是通过使用 SourceResolver.release(Source) 来实现的,它可以找到合适的 SourceFactory
  • 注意:PartSources 不需要被释放,可以不声明release方法
public void contextualize(org.apache.avalon.framework.context.Context context)
  • 从上下文中获取 objectModel
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号