ClassScaner.scanPackageBySuper扫描类然后装入 map中,getStorage 通过扫描到的被装入HOLDER里面的类的别名Alias返回类的实例对象

 

用于扫描com.major.openplatform.support.storage.file包中所有继承自AbstractFileStorage的类,并将它们存储在一个Set集合中。其中,ClassScaner是一个自定义的类扫描器,可以通过它来扫描指定包中的所有类。scanPackageBySuper方法用于扫描指定包及其子包中所有继承自指定超类的类。在这个例子中,超类为AbstractFileStorage。返回值为一个Set集合,其中存储了所有扫描到的类。

// 自动注册 Set<Class<AbstractFileStorage>> clses = ClassScaner.scanPackageBySuper("com.storage.file", AbstractFileStorage) clses.each { Class<AbstractFileStorage> cls-> AbstractFileStorage instance = cls.newInstance() HOLDER.put(instance.alias, instance ) }

 扫描类然后装入 map中,getStorage  通过扫描到的被装入HOLDER里面的类的别名Alias返回类的实例对象

package com.storage.file

import cn.hutool.core.lang.ClassScaner
import com.major.openplatform.utils.SysConfig
import com.domain.security.SysFile

import javax.servlet.http.HttpServletResponse
import javax.xml.ws.Holder

/**
 * Created by Grain on 2017/4/15.
 */
class FileStorageFactory {

    static Map<String, AbstractFileStorage> HOLDER = [:]

    static {
        // 自动注册
        Set<Class<AbstractFileStorage>> clses = ClassScaner.scanPackageBySuper("com.support.storage.file", AbstractFileStorage)
        clses.each { Class<AbstractFileStorage> cls->
            AbstractFileStorage instance = cls.newInstance()
            HOLDER.put(instance.alias, instance )
        }
    }

    static AbstractFileStorage getStorage(String name = SysConfig.fileDataBase) {
        try {
            println(HOLDER)
            return HOLDER[name] as AbstractFileStorage
        } catch (NullPointerException e) {
            System.out.println("Failed to get storage: " + e.getMessage()); return null;
        }

    }

    static InputStream getInputStream(Long sysFileId) {
        SysFile sysFile = SysFile.get(sysFileId)
        return getInputStream(sysFile)
    }

    static InputStream getInputStream(SysFile sysFile) {
        AbstractFileStorage storage = getStorage(sysFile.storage)
        return storage.getInputStream(sysFile)
    }

    static void download(HttpServletResponse res, Long sysFileId) {
        SysFile sysFile = SysFile.get(sysFileId)
        download(res, sysFile)
    }

    static void download(HttpServletResponse res, String uuid) {
        SysFile sysFile = new SysFile(storage: 'idoc', saveFileName: uuid)
        download(res, sysFile)
    }

    static void download(HttpServletResponse res, SysFile sysFile) {
        AbstractFileStorage storage = getStorage(sysFile.storage)
        storage.download(res, sysFile)
    }
}

 被扫描的类  ,里面有别名Alias



import javax.servlet.http.HttpServletResponse
/**
 * Created by Grain on 2017/4/15.
 */
class RfFileStorage extends AbstractFileStorage implements FileStorage {

    static Logger logger = LoggerFactory.getLogger( RfFileStorage.class )


    @Override
    InputStream getInputStream(Long sysFileId ) {
        getInputStream(SysFile.get( sysFileId ) )
    }

    @Override
    InputStream getInputStream(SysFile sysFile) {
        File file = new File( sysFile.localPath + File.separator + sysFile.saveFileName )
        return file.newInputStream()
    }

    // 通过一个sysFile获取其访问路径
    @Override
    String retrieveDownloadURL(SysFile sysFile) {
        return "/file/url/" + sysFile.id
    }

    @Override
    String getName() {
        return "TDM主站"
    }

    @Override
    String getAlias() {
        return "rf"
    }

    // 生成文件名
    static String genFileName() {
        return UUIDGenerator.generate()
    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值