回调是什么意思?

时间:2014-08-24 07:12:03

标签: java spring

我正在阅读spring文档。我一直得到这个词“回调”。 例如: 生命周期回调 初始化回调等。

我们如何理解回调函数?当你在春天说“Lifecycle callbacks”时,它意味着什么?

我一直在努力理解这一点,但我不确定我是否理解正确。 请帮忙。

2 个答案:

答案 0 :(得分:3)

wiki有一个很好的解释:

  

在计算机编程中,回调是对可执行代码的引用,   或者一段可执行代码,作为参数传递给其他人   码。这允许较低级别的软件层调用子例程   (或函数)在更高级别的层中定义。

另请查看这篇有趣的文章 Java Tip 10: Implement callback routines in Java

示例example

    interface CallBack {
    void methodToCallBack();
}

class CallBackImpl implements CallBack {
    public void methodToCallBack() {
        System.out.println("I've been called back");
    }
}

class Caller {

    public void register(CallBack callback) {
        callback.methodToCallBack();
    }

    public static void main(String[] args) {
        Caller caller = new Caller();
        CallBack callBack = new CallBackImpl();
        caller.register(callBack);
    }
}

Paul Jakubik,C ++中的回调实现。

  

回调最容易用电话系统来描述。   功能调用类似于通过电话呼叫某人,询问   她提出一个问题,得到一个答案,然后挂断电话;添加回调   改变了类比,以便在问她一个问题后,你也给出了   她的姓名和号码,以便她可以给你回答。

答案 1 :(得分:3)

生命周期

在Spring bean的上下文中(我相信你正在阅读的内容 - 很难用你提供的小信息来讲述),bean会经历不同的生命周期阶段(比如创建和销毁)。以下是您可以挂钩的Spring bean的生命周期阶段:

enter image description here

回调

@ R.T.的维基百科链接回调是什么,是理解回调的一个很好的起点。在Java中,回调的概念以不同的方式实现。

  

在没有函数值参数的面向对象编程语言中,例如在1.7版本之前的Java中,可以通过传递抽象类或接口的实例来模拟回调,接收器将调用一个或多个方法,而主叫端提供了具体的实现。

@SotiriosDelamanolis在this answer中给出了一个很好的例子,我将在此处发布,仅供上下文使用。

/**
 * @author @SotiriosDelamanolis 
 * see https://stackoverflow.com/a/19405498/2587435
 */
public class Test {
    public static void main(String[] args) throws  Exception {
        new Test().doWork(new Callback() { // implementing class            
            @Override
            public void call() {
                System.out.println("callback called");
            }
        });
    }

    public void doWork(Callback callback) {
        System.out.println("doing work");
        callback.call();
    }

    public interface Callback {
        void call();
    }
}

LifeCycle Callback

通过查看上面的图像,您可以看到Spring允许您使用一些接口和注释挂钩bean生命周期。例如

挂钩生命周期的bean创建部分,您可以实现InitializingBean,它具有回调方法afterPropertiesSet()。当您实现此接口时,Spring会接听它,并调用afterPropertiesSet()

例如

public class SomeBean implements InitializingBean {
    @Override
    public void afterPropertiesSet() {  // this is the callback method
                                        // for the bean creation phase of the 
                                        // spring bean lifecycle
        // do something after the properties are set during bean creation
    }
}

或者,您可以将@PostConstruct方法用于非InitializingBean实现的方法,或者使用xml config中的init-method

该图显示了您可以挂钩并为其提供“回调”方法的其他生命周期阶段。生命周期阶段在图表的顶部加下划线

您可以在Spring reference - Lifecycle Callbacks

查看更多内容