@Interceptors and inv.proceed()铪铪

news/2024/7/2 16:28:13

寫了一個小程式測試了一下, @Interceptors 他的流程
@Stateless
@Interceptors({AuditInterceptor.class, SecurityInterceptor.class})


public class AuditInterceptor {
@AroundInvoke public Object auditOperation(InvocationContext inv)
throws Exception {
try {
System.out.println("audit "+inv.getMethod().getName());
Object result = inv.proceed();
System.out.println("test after proceed");
return result;
} catch ( Exception ex ) {
throw ex;
} finally {
System.out.println("finally end message");
}
}
}


以及
import javax.interceptor.*;
public class SecurityInterceptor {
@AroundInvoke public Object securitySome(InvocationContext inv)
throws Exception {
try {
System.out.println("security"+inv.getMethod().getName());
Object result = inv.proceed();
System.out.println("test after proceed in security");
return result;
} catch ( Exception ex ) {
throw ex;
} finally {
System.out.println("Final in security");
}

}

}






執行的結果是


audit getHello|#]

securitygetHello|#]

Hello in getHello()|#]

test after proceed in security|#]

Final in security|#]

test after proceed|#]

finally end message|#]


換句話說, 當我們透過 InvocationContext proceed 之後,
會將 process 指到下一個 Interceptor
當沒有下一個 Interceptor 的時候

就會到了 Bean Method() 的操作

等到 Bean Method() 結束之後
才會開始處理 proceed 之後的功能
一直等到你執行 reutnr Object ( inv.proceed() ) .

雖然 return 該 Object ( inv.proceed() ) 之後,
我們也可以利用 finally 來處理最後的相關事務 



http://www.niftyadmin.cn/n/3653818.html

相关文章

PLSQL 经常自动断开失去连接的解决过程

问题背景:情况是这样的,很多开发同事的plsql上班时间开着8个小时,有时候他们出去抽烟后或者中午吃完饭,回来在plsql上面执行就报错无响应,然后卡住了半天动弹不了,非得重新登录plsql才生效,我猜…

JasperForge 正式開張

搞 Java Web solution 的, 在需要用到 Report Engine 的時候, 通常會先想.. 我能不能使用 jasperReport 作為我的 ReportEngine, 利用 iReport 當作我的 template Report Designer. 很高興的, JasperSoft 將這些都整合起來放到了 JasperForge, 更提出了一個新的 BI 專案, Jaspe…

zabbix3 0 从坚持到用起 开始配置管理界面

--> 背景,源码安装完成zabbix-server3.0已经安装完成,接下来需要进行基础配置,zabbix-server安装参考:http://blog.csdn.net/mchdba/article/details/51263871,接下来可以开始配置zabbix管理界面。1,打开…

is DTO an antipattern in EJB 3.0 ?

這個問題應該是從 Raghu Kodalis blog 開始的http://www.jroller.com/page/raghukodali?entrydto_an_antipattern_in_ejbRaghu 的論述主要在於, Design Pattern 中的 Data Transfer Objects (DTO) 原本是要避免重新取得舊有的 EJB2.x 的遠端呼叫時間, 讓 DTO 封裝資料後送到客…

ORA-12537 TNS connection closed错误处理过程

1,同事说oracle测试换了连接不上了,报错如下[oraclepldb236 admin]$ rlwrap sqlplus powerdesk/pd141118PD236SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 23 14:16:31 2015Copyright (c) 1982, 2009, Oracle. All rights reserved.ERROR:ORA-…

JSF1.2 in JavaEE5 

Chapter 1 JSF 1.2 overviewJSF ( Java Server Faces ) 在 JavaEE5 之中, 是採用 1.2 的版本. 目前的 RI 僅有 SUN 釋出的版本, 並且可以使用在 NetBeans 5.5 與 Glassfish 之中. 主要來說, 簡化了相關的開發方式, 以及 Scoped Managed Bean 可以利用 Annotation 的方式快速存取…

BPM introduction

以往, 大家對於流程控管, 似乎都是稱之為 Workflow, 然而, 專門控制流程的會稱之為 FlowEngine. 所以想要了解接下來我所引導介紹的章節, 大家可以先行閱讀 TSS 的這篇文章. BPEL and Java .在 Java Opensource 的流程控管系統中, 當中有幾個重要的 flow engine .jBPM ( http:/…

開始來玩 jBPM

如果沒有特別的需求,可以直接下載 JBoss jBPM Starters Kit. 裡面其實就包含了 JBoss Application Server 以及 JBoss jBPM. 因為 jBPM 是採用 Hibernate 存取資料庫, 所以裡面也有 Hibernate 等元件. 如果你已經要將 jBPM 部署在其他的 Application Server 之上, 僅…