VFS含义是虚拟文件系统;主要是通过程序能够方便读取本地文件系统、FTP文件系统等系统中的文件资源。
Mybatis中提供了VFS这个配置,主要是通过该配置可以加载自定义的虚拟文件系统应用程序。
一.配置应用
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="vfs" ref="vfs"/>
</bean>
<bean id="vfs" class="com.zzy.vfs.VFSmybatisTest">
<!-- 自定义虚拟文件系统应用程序不做说明,后期单独介绍 -->
</bean>
二.源码分析
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<String> list(String path) throws IOException {
List<String> names = new ArrayList<String>();
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> T invoke(Method method, Object object, Object... parameters)
D.获取资源list
protected static List<URL> getResources(String path) throws IOException
E.递归列出所有资源
protected abstract List<String> 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大数据资源),只做分享,欢迎大家关注获取,保证免费,非任何机构
更多精彩请扫码关注微信公众号—— 名称:java版web项目 id :java_project