Resource(1)

Spring的Resource接口为处理各种类型的资源提供了一致的抽象,包括URL、File、ClassPath等。Resource接口集成InputStreamSource,提供exists、isReadable、getURL等方法检查和访问资源。此外,它还有一系列实现类如ByteArrayResource、FileSystemResource等,方便不同场景下的资源操作。

概述

开发中需要处理很多的外部资源(URL资源、File资源、ClassPath相关资源、服务器相关资源等),使用这些资源需要用到不同的接口,这就增加系统的复杂程度。
处理这些资源的步骤基本类似(1打开资源,2读取资源,3关闭资源)。
所以Spring提供了一个Resource的接口来统一进行这些底层的资源的访问。

Resource接口

Resource.class

package org.springframework.core.io;

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URL;

public abstract interface Resource extends InputStreamSource
{
  public abstract boolean exists();

  public abstract boolean isReadable();

  public abstract boolean isOpen();

  public abstract URL getURL()
    throws IOException;

  public abstract URI getURI()
    throws IOException;

  public abstract File getFile()
    throws IOException;

  public abstract long contentLength()
    throws IOException;

  public abstract long lastModified()
    throws IOException;

  public abstract Resource createRelative(String paramString)
    throws IOException;

  public abstract String getFilename();

  public abstract String getDescription();
}

InputStreamSource.class

package org.springframework.core.io;

import java.io.IOException;
import java.io.InputStream;

public abstract interface InputStreamSource
{
  public abstract InputStream getInputStream()
    throws IOException;
}
  1. InputStreamSource接口
    getInputStream每次调用都返回一个资源对应的java.io.InputStream的字节流,调用完之后必须关闭该资源
  2. Resource接口集成InputStreamSource接口,并提供了一些方法:

    • exists:判断Resource代表的资源是否存在,存在返回true;
    • isReadable:返回当前Resource代表的资源是否可读,可读则返回true;

    • getURL:如果当前的Resource代表的资源由java.util.URL代表,返回该URL,否则抛出IO异常

    • getURI:如果当前的Resource代表的资源由java.util.URL代表,返回该URI,否则抛出IO异常

    • getFile:如果当前的Resource代表的资源由java.io.File代表,返回该File,否则抛出IO异常

    • contentLength:返回当前Resource代表的文件资源的长度
    • lastModified:返回当前Resource代表的底层资源的最后修改时间
    • createRelative:用于创建相对于当前Resource代表的资源,比如当前Resource代表文件资源”d:/a/”,则Resource.createRelative(“test.txt”),将返回”d:/a/test.txt”的资源
    • getFilename:返回的是当前Resource代表的文件资源的路径,例如有File资源”d:/test.txt”将返回”test.txt”,而URL资源将返回“”
    • getDescription:返回当前Resource代表的资源的描述符,通常就是资源的全路径(实际的文件名或者实际的URL地址),例如有File资源”d:/test.txt”将返回”file [d:\test.txt]”,而URL资源"http://www.baidu.com"将返回"URL [http://www.baidu.com]"
package com.test;

import java.net.MalformedURLException;

import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;

import junit.framework.TestCase;

public class ResourceTest extends TestCase {
public void testResource(){
    Resource resource=new FileSystemResource("d:/test.txt");
    try {
        Resource resource2=new UrlResource("http://www.baidu.com");
        System.out.println(resource2.getFilename());
        System.out.println(resource2.getDescription());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    System.out.println(resource.getFilename());
    System.out.println(resource.getDescription());

}
}

Resource接口提供了足够的抽象。而且提供了很多Resource的实现:
- ByteArrayResouce
- InputStreamResource
- FileSystemResource
- UrlResource
- ClassPathResource
- ServletContextResource
- VfsResource

其实: @TableField(exist = false) @JsonProperty("assessment_id1") @JSONField(name = "assessment_id1") private String assessmentId1; @TableField(exist = false) @JsonProperty("resource_type1") @JSONField(name = "resource_type1") private String resourceType1; @TableField(exist = false) @JsonProperty("f_spare1") @JSONField(name = "f_spare1") private String fSpare1; @TableField(exist = false) @JsonProperty("f_tools1") @JSONField(name = "f_tools1") private String fTools1; @TableField(exist = false) @JsonProperty("f_resource1") @JSONField(name = "f_resource1") private String fResource1; @TableField(exist = false) @JsonProperty("f_technology1") @JSONField(name = "f_technology1") private String fTechnology1; @TableField(exist = false) @JsonProperty("f_data1") @JSONField(name = "f_data1") private String fData1; @TableField(exist = false) @JsonProperty("eletronic_resource1") @JSONField(name = "eletronic_resource1") private String eletronicResource1; @TableField(exist = false) @JsonProperty("remark1") @JSONField(name = "remark1") private String remark1; @TableField(exist = false) @JsonProperty("assessment_id2") @JSONField(name = "assessment_id2") private String assessmentId2; @TableField(exist = false) @JsonProperty("resource_type2") @JSONField(name = "resource_type2") private String resourceType2; @TableField(exist = false) @JsonProperty("f_spare2") @JSONField(name = "f_spare2") private String fSpare2; @TableField(exist = false) @JsonProperty("f_tools2") @JSONField(name = "f_tools2") private String fTools2; @TableField(exist = false) @JsonProperty("f_resource2") @JSONField(name = "f_resource2") private String fResource2; @TableField(exist = false) @JsonProperty("f_technology2") @JSONField(name = "f_technology2") private String fTechnology2; @TableField(exist = false) @JsonProperty("f_data2") @JSONField(name = "f_data2") private String fData2; @TableField(exist = false) @JsonProperty("eletronic_resource2") @JSONField(name = "eletronic_resource2") private String eletronicResource2; @TableField(exist = false) @JsonProperty("remark2") @JSONField(name = "remark2") private String remark2; }这些字段是同一个其他类的: @Data @TableName("security_assessment_resource") public class SecurityAssessmentResourceEntity { @TableId(value = "f_id") @JsonProperty("f_id") @JSONField(name = "f_id") private String id; @TableField(value = "assessment_id") @JsonProperty("assessment_id") @JSONField(name = "assessment_id") private String assessmentId; @TableField(value = "resource_type") @JsonProperty("resource_type") @JSONField(name = "resource_type") private String resourceType; @TableField(value = "f_spare") @JsonProperty("f_spare") @JSONField(name = "f_spare") private String fSpare; @TableField(value = "f_tools") @JsonProperty("f_tools") @JSONField(name = "f_tools") private String fTools; @TableField(value = "f_resource") @JsonProperty("f_resource") @JSONField(name = "f_resource") private String fResource; @TableField(value = "f_technology") @JsonProperty("f_technology") @JSONField(name = "f_technology") private String fTechnology; @TableField(value = "f_data") @JsonProperty("f_data") @JSONField(name = "f_data") private String fData; @TableField(value = "eletronic_resource") @JsonProperty("eletronic_resource") @JSONField(name = "eletronic_resource") private String eletronicResource; @TableField(value = "remark") @JsonProperty("remark") @JSONField(name = "remark") private String remark; @TableField(value = "create_time", fill = FieldFill.INSERT) @JsonProperty("create_time") @JSONField(name = "create_time") private Date createTime; @TableField(value = "update_time", fill = FieldFill.UPDATE) @JsonProperty("update_time") @JSONField(name = "update_time") private Date updateTime; }。相当于是有两个其他类,现在我需要你帮我写一个方法。我传入第一个类。你帮我生成两个第二个类的数据且存储到数据库。assessment_id表示第一个类的id。然后他们自己的id使用RandomUtil.uuId();来创建存储。
最新发布
11-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值