我刚开始学习Java EE,但是一直无法理解回调究竟是什么以及它们的作用。
有没有人能够清晰地解释一下什么是回调?我在网站上查找了很多信息,但是都没有找到太多相关内容。
我刚开始学习Java EE,但是一直无法理解回调究竟是什么以及它们的作用。
有没有人能够清晰地解释一下什么是回调?我在网站上查找了很多信息,但是都没有找到太多相关内容。
正式定义
回调是一种机制,通过它可以拦截企业 Bean 的生命周期。
实际示例
我认为一个例子可以帮助展示这些回调注解的有用性。让我们来看看 @PreDestroy
回调。从 JBoss 对 EJB 的文档中,我们可以看到:
PreDestroy - 在从池中删除或销毁 Bean 时被调用。
假设你有一个具有某种文件资源的 Bean。你想确保当 Bean 被销毁时,文件锁也随之销毁。我们知道等待垃圾回收器处理这些事情是“冒险”的做法;我们不知道它何时运行。
但是我们可以放置一些逻辑,当 Bean 被删除时调用它。
@PreDestroy
public void cleanUp() {
// Clean up your FileOutputStreams etc.
}
回调函数是在EJB(或容器生命周期)的特定点执行自定义代码的主要机会。
例如,您想要初始化特定字段或组件:
您将实现 @PostConstruct
回调方法。使用此注释进行注释的方法是向 JavaEE 运行时广告,该方法必须在创建该类的实例后立即运行。此注释的常见用途是实例化类级变量或准备共享资源。
JavaEE 规范指定了多个类似于此类的注释作为生命周期回调。这意味着在启动时,容器知道扫描部署包以查找实现任何可用回调的工件。通过这样做,它知道通知感兴趣的组件(EJB、CDI 组件、JAX-WS bean 实现)特定事件,或在应用程序服务器中发生特定操作时调用特定方法。
回调机制本身就是回调模式的一种实现(如果您来自 UI 编程世界,则是事件驱动编程)。
更多阅读: