存放在 /src/main/resources
目录或子目录下的文件是资源文件. 除了 ActFramework 需要的文件, 比如配置文件, 路由表等, 应用可以定义自己的资源文件, 并通过 @LoadResource
注解加载到程序中:
public class Foo {
@LoadResource("name.list")
private List<String> nameList;
}
上面的代码指令 ActFramework 将 resources/name.list
文件读取到 List<String> nameList
中, 每一行读取为 nameList
列表中的一个元素.
ActFramework 支持从文本资源中加载到以下数据结构:
- 字符串
- 字符串列表 (每一行加载为列表中的一个元素)
Properties
- 从.properties
文件资源中加载Map
- 从类.properties
文件资源中加载List
- 任意类型 - 从 JSON 或者 yaml 文件中加载
任何类型文本资源都可以加载到字符串:
// snippet s2.1
@LoadResource("myfile.txt")
private String myStr;
任何类型文本资源都可以加载到 List<String>
数据结构, 该资源的每一行加载为字符串列表中的一个元素:
// snippet s2.2
@LoadResource("myfile.txt")
private List<String> myLines;
后缀名为 ".properties" 的资源文件可以加载进 Properties
类型数据中:
// snippet s2.3
@LoadResource("foo.properties")
private Properties foo;
任何类似 properties 文件内容的文本 (包括 .properties 文件) 都可以加载进 Map
类型数据:
// snippet s2.4a
@LoadResource("foo.properties")
private Map<String, Object> foo;
如果文本中的值是特定类型, 你可以声明为该类型. 假设你的文本文件 int_values.txt
内容如下:
# s2.4b
one=1
two=2
你可以使用下面的方式类声明 Map
类型参数:
// snippet s2.4c
@LoadResource("int_values.txt")
private Map<String, Integer> intValues;
在文本中每一行都可以转换为某个特定类型的情况下,可以将文本加载到非字符类型的 List
结构中, 例如资源文本为:
1
2
3
4
5
可以加载到 List<Integer>
中:
@LoadResource("int.list")
private List<Integer> intList;
JSON 资源内容可以加载到任何符合文件内容结构的数据中:
resource file: chracters.json
// snippet s2.6a
[
{
"username": "jamesbond",
"level": 32
},
{
"username": "ethanhunt",
"level": 30
},
{
"username": "jasonbourne",
"level": 29
}
]
The java POJO class
// snippet s2.6b
@Data
public class Character implements SimpleBean {
public String username;
public int level;
}
Load the characters into a list of Character
s
// snippet s2.6c
@LoadResource("characters.json")
private List<Character> characters;
和 JSON 资源相似, YAML 资源也可以加载到任何符合文件内容结构的数据中:
resource file: chracters.yml
# snippet s2.7a
- username: jamesbond
level: 32
- username: ethanhunt
level: 30
- username: jasonbourne
level: 29
The java POJO class
// snippet s2.7b
@Data
public class Character implements SimpleBean {
public String username;
public int level;
}
Load the characters into a list of Character
s
// snippet s2.7c
@LoadResource("characters.yml")
private List<Character> characters;
ActFramework 支持从任何资源(包括二进制资源)中加载到以下数据结构:
byte[]
java.nio.ByteBuffer
java.nio.file.Path
java.net.URL
java.io.File
java.io.InputStream
java.io.Reader
org.osgl.storage.ISObject
// snippet s3a
@LoadResource("myFile.pdf")
private ISObject myStorageObject;
@LoadResource("myFile.pdf")
private File myFile;
@LoadResource("myFile.pdf")
private byte[] myFileBlob