我正在阅读spring文档。我一直得到这个词“回调”。 例如: 生命周期回调 初始化回调等。
我们如何理解回调函数?当你在春天说“Lifecycle callbacks”时,它意味着什么?
我一直在努力理解这一点,但我不确定我是否理解正确。 请帮忙。
答案 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的生命周期阶段:
@ 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();
}
}
通过查看上面的图像,您可以看到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
。
该图显示了您可以挂钩并为其提供“回调”方法的其他生命周期阶段。生命周期阶段在图表的顶部加下划线
查看更多内容