javaがcalbackを実現


http://www.wuwenliang.net/2017/01/26/java%E5%AE%9E%E7%8E%B0callback/
コールバックは双方向モードです。どういう意味ですか?つまり、コールされた側も相手を呼び出します。これをコールバックといいます。「If you call me,i will call back」。
Java言語では、コールバック機構がよく使われていますが、普段は気づかなかっただけかもしれません。例えば、Android開発中のOnClickListenerは、ボタンがトリガされると、ユーザーによって実現されるコールバック方法を実行し、キーへのフィードバックを完了する。また、例えばSpring JDBCを使ってデータベース操作を行う時の方法の中には、JdbcTemplate.udate(sql,new PreparedStatitentSetter()といったように、ここのPreparedSttement Setter()は、その内部でsets Valuesを実行したり、挿入したり、更新したりする方法があります。
本論文は簡単な例を通して、回調の実現とそのメカニズムについて小さな記録を作り、未来の展望に備え、読者にいくつかの啓発を与え、微力をかけたいと思います。レプリカモードは、実際には、設計モードにおける観察者モードの簡略化である。ユーザークラスは、フィードバックインターフェースを実現し、インターフェースの参照をユーザー方法に渡す。ユーザ方法を呼び出すと、このユーザ方法はインターフェース方法の実装を呼び出すことができ、これはコールバックの基本的なプロセスである。
どうやって実現しますかまず、コールバックを定義するコールバックインターフェースICallbackを定義します。
public interface ICallback {
    public T doCallback(E e);
}   
この反転インターフェースは2つの汎型パラメータT,Eを受け入れた。Tはユーザによって指定された戻りタイプであり、Eはユーザによって入力されたパラメータであり、コンパイルの際に検証と消去を行う。
次に、ユーザークラスを宣言し、クラス内で一つの方法を定義し、フィードバックインターフェースに入る。
@Service("userServiceImpl")
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserDaoImpl userDaoImpl;
    /**
     * @       ,      
     * @param ICallback
     * @time   12:31:09
     * @return T
     */
    private  T execute(ICallback fun) {
        return fun.doCallback(userDaoImpl);
    }

    //    
    @Override
    public boolean doRegister(final User user) {
        return this.execute(new ICallback() {

            @Override
            public Boolean doCallback(UserDaoImpl e) {
                return e.doRegister(user);
            }
        });
    }       
}
ここでは、ユーザー登録の場面をシミュレーションします。ユーザサービス実現クラスUserServiceImplの登録方法doregisterは、フロントからControllerによって送られてきた組み立てられたユーザオブジェクトを受け取り、Springを介して自動的にオブジェクトを注入するUserDaoImplユーザ持久類のdoRegister(user)方法をデータベースに保存する。
execute(ICallback) fun)方法は、コールバックインターフェースのコールバック方法docallbackを呼び出し、ユーザの持続可能な種類のuserDaoImplに着信し、ユーザによって指定された戻り値を返す(この戻り値は特定の方法で指定される)。例えば、登録方法のdoRegisterでは、Booleanの値を返します。
プログラムが実行されると、userオブジェクトは、doregister方法に着信し、execute方法を呼び出し、匿名の内部クラスで、docallback方法を実現し、UserDaoImplの登録方法を呼び出して、ユーザデータの恒久化を実現する。
要約すると、ユーザ方法は、コールバック方法の参照を持っています。このユーザ方法を起動すると、逆方向にコールバックインターフェースのコールバック方法が呼び出されます。この方法の具体的なプロセスはユーザによって実現されます。このプロセスをコールバックと呼びます。