All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.jkcode.jkmvc.scope.IScope.kt Maven / Gradle / Ivy

package net.jkcode.jkmvc.scope

import net.jkcode.jkmvc.common.trySupplierFinally
import java.io.Closeable

/**
 * 作用域对象
 *    1. 实现该接口, 必须承诺 beginScope()/endScope()会在作用域开始与结束时调用, 一般用于初始化与销毁资源/状态, 以保证作用域内的状态干净.
 *    2. 父作用域的 beginScope()/endScope() 会自动调用子作用域的 beginScope()/endScope()
 *
 * @author shijianhang<[email protected]>
 * @date 2019-09-17 9:52 AM
 */
interface IScope {

    /**
     * 添加子作用域
     * @param childScope
     */
    fun addChildScope(childScope: IScope)

    /**
     * 添加子作用域
     * @param closing
     */
    fun addChildScope(closing: Closeable){
        addChildScope(CloseableScope(closing))
    }

    /**
     * 作用域开始
     */
    fun beginScope()

    /**
     * 作用域结束
     */
    fun endScope()

    /**
     * 启动新的作用域
     *    兼容 action 返回类型是CompletableFuture
     *
     * @param action
     * @return
     */
    public fun  newScope(action: () -> T):T{
        beginScope() // 开始

        return trySupplierFinally(action){ r, ex ->
            endScope() // 结束

            if(ex != null)
                throw ex;
            r
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy