【发布时间】:2012-03-05 15:35:01
【问题描述】:
我们有拦截器,我们有自定义拦截器,我们可以在操作执行之前或之后执行我们想做的所有事情。
那么需要使用 Preparable 接口并为其实现 prepare 方法呢?
这是另一种选择,还是有一些特定的目标可以这样做?
【问题讨论】:
标签: java model-view-controller jakarta-ee struts2 interceptor
我们有拦截器,我们有自定义拦截器,我们可以在操作执行之前或之后执行我们想做的所有事情。
那么需要使用 Preparable 接口并为其实现 prepare 方法呢?
这是另一种选择,还是有一些特定的目标可以这样做?
【问题讨论】:
标签: java model-view-controller jakarta-ee struts2 interceptor
Well Preparable 接口与 Prepare Interceptor 结合使用。该接口定义了一个方法prepare(),顾名思义,该方法负责允许操作自行准备。
在实现 Preparable 的操作上准备拦截器调用 prepare()。此拦截器对于您需要确保在实际执行方法运行之前运行某些逻辑的任何情况都非常有用。因此,如果您看到这是某种类型,如果 init 用于您的操作类,它会确保在操作执行或任何操作之前其他方法被调用,此方法准备您的执行方法正常工作。
如果您在 core 中看到 default-stack 定义,您就会知道这个拦截器在 params 或表明其用途的工作流拦截器之前被调用。
它的一个典型用途是运行一些逻辑来从数据库中加载一个对象,以便在设置参数时可以在该对象上设置它们。有关详细信息,请阅读 Prepare 拦截器的文档,了解它如何与 Preparable 接口紧密协作。简而言之,Prepare 拦截器仅在操作实现 Preparable 时才会起作用。
【讨论】:
Prepare 接口确保如果正在使用的对象已经在值堆栈上,则无需查询数据库,它使用值堆栈上的现有对象填充表单属性。
【讨论】: