我刚刚开始关注Java EE,但我很难理解回调的确切含义以及它们的用途。
有没有人清楚地解释它们是什么?我查看了网站,但找不到太多信息。
答案 0 :(得分:1)
正式定义
回调是一种可以拦截企业bean生命周期的机制。
实际例子
我认为一个例子将有助于展示这些回调注释的有用性。我们来看看@PreDestroy
回调。从EJB上的JBoss文档中,我们可以看到:
PreDestroy - 在从池中删除bean或销毁bean时调用。
你有一个拥有某种文件资源的Bean。您希望确保在销毁Bean时,该文件锁随之而来。好吧,我们知道它有风险"练习等待垃圾收集器为我们处理这些事情;我们不知道它什么时候开始运行。
但我们能做的就是在删除bean时调用一些逻辑。
@PreDestroy
public void cleanUp() {
// Clean up your FileOutputStreams etc.
}
在你的bean中,很明显当bean被销毁并且它不需要来自外部的额外代码时执行这个方法。这可以确保在bean被销毁时清理您的资源。
答案 1 :(得分:0)
回调是您在EJB(或容器的生命周期)中的特定点执行自定义代码的主要机会。
例如,您想要初始化特定的字段或组件
您将实施@PostConstruct
回调方法。使用此方法注释的方法是向JavaEE运行时发布的广告,该方法必须在创建该类的实例后立即运行。此注释的常见用法是设置类级变量或准备共享资源。
JavaEE规范已经指定了几个注释,例如这个注释,作为生命周期回调。这意味着在启动时,容器知道扫描部署工具包以查找实现任何可用回调的工件。在这样做时,它知道在特定事件中通知感兴趣的组件(EJB,CDI组件,JAX-WS bean实现),或者在应用服务器中发生特定操作时调用特定方法。
回调机制本身就是Callback模式的实现(或者如果你来自UI编程世界,则是事件驱动的编程)
进一步阅读: