Mybatis源码分析(六):mybatis可配置属性VFS

版权声明:欢迎转载,注明出处即可,谢谢! https://blog.csdn.net/qq_17231297/article/details/84567599

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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_17231297/article/details/84567599