VFS含义是虚拟文件系统;主要是通过程序能够方便读取本地文件系统、FTP文件系统等系统中的文件资源。
Mybatis中提供了VFS这个配置,主要是通过该配置可以加载自定义的虚拟文件系统应用程序。
一.配置应用
二.源码分析
1.vfs在源码中加载过程
if (this.vfs != null) {
configuration.setVfsImpl(this.vfs);
}
setVfsImpl(this.vfs) 加载自定义的vfs
2.setVfsImpl(this.vfs)方法源码
public void setVfsImpl(Class extends VFS> vfsImpl) {
if (vfsImpl != null) {
this.vfsImpl = vfsImpl;
VFS.addImplClass(this.vfsImpl);
}
}
其中vfsImpl是vfs的实现。
3.VFS相关class所在的包
4.VFS源码
public abstract class VFS {
源码可自己查看,这里简单介绍下VFS其中的源码内容
}
VFS中有piblic method和protected method
piblic method:
A.把自定义的类添加到VFS实现list中
public static void addImplClass(Class extends VFS> clazz) {
if (clazz != null) {
USER_IMPLEMENTATIONS.add(clazz);
}
}
B.获得VFS的单例
2.public static VFS getInstance() {
}
C.VFS的实现在当前环境下有效时返回true
public abstract boolean isValid();
D.递归列出所有的资源
public List list(String path) throws IOException {
List names = new ArrayList();
for (URL url : getResources(path)) {
names.addAll(list(url, path));
}
return names;
}
protected method:
A.根据类名获取class
protected static Class> getClass(String className)
B.获取类中的方法
protected static Method getMethod(Class> clazz, String methodName, Class>... parameterTypes)
C.执行对象的方法
protected static T invoke(Method method, Object object, Object... parameters)
D.获取资源list
protected static List getResources(String path) throws IOException
E.递归列出所有资源
protected abstract List list(URL url, String forPath) throws IOException;
类中定义了一个常量数组
public static final Class>[] IMPLEMENTATIONS = { JBoss6VFS.class, DefaultVFS.class };
IMPLEMENTATIONS 该数组中有两个VFS :JBoss6VFS和DefaultVFS
5.JBoss6VFS:JBoss6提供的vfs api
public class JBoss6VFS extends VFS
查找访问JBoss 6 VFS需要的所有class和method,其他方法比较简单,不做详细介绍。
6.DefaultVFS api:默认实现
可以读取大部分服务的系统文件资源,大部分情况使用DefaultVFS 足够。
A.Public中的isValid和list是对父类的Override
B.Protected的方法
listResources(JarInputStream jar, String path)
列出所有的 JarInputStream
findJarForResource(URL url)
通过给定url找到jar文件中包含的资源
getPackagePath(String packageName)
Java包名转换成path
isJar(URL url)
isJar(URL url, byte[] buffer)
是否是一个JAR file
欢迎大家加入Java高级架构/互联网(严禁培训机构、广告群,最干净的技术交流群):微信号:1083683150(备注:技术群或者4000G架构师资源)
微信平台本人收集个大量资源(4000G架构师资源,1000G大数据资源),只做分享,欢迎大家关注获取,保证免费,非任何机构