成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Eclipse+JBoss+EJB3攔截器方法和攔截器類

開發 后端
本文講述Eclipse+JBoss+EJB3攔截器方法和攔截器類。EJB3可以通過攔截器對Bean方法進行攔截和覆蓋。有一些攔截器方法會攔截器不同Bean中的方法,在這種情況下,需要將攔截器方法放在一個單獨的類中。這個類就叫攔截器類。

一、攔截器方法

EJB3可以通過攔截器對Bean方法進行攔截和覆蓋。這有些象AOP中的around。通過AOP的around方法,可以修改被攔截方法的返回值、參數值,甚至可以取消被攔截方法的執行。EJB3的攔截器可以用在無狀態Session Bean、有狀態Session Bean和消息驅動Bean(MDB)的方法中。實現攔截器的最簡單的方法是使用攔截器方法。也就是說,只要在當前的Bean中使用@AroundInvoke對某個方法進行注釋(關于攔截器的類都在javax.interceptor包中),那么這個方法就會變成攔截器方法,該攔截器方法會攔截當前Bean中的所有方法。實現過程如下:

  1. @Stateful 
  2. public class GreeterBean implements Greeter  
  3. {  
  4.     @AroundInvoke 
  5.     public Object myInterceptorMethod1(InvocationContext ic) throws Exception  
  6.     {  
  7.         System.out.println("myInterceptorMethod1:" + ic.getMethod().getName());  
  8.         obj = ic.proceed();      
  9.     }  
  10.     @AroundInvoke 
  11.     public Object myInterceptorMethod2(InvocationContext ic) throws Exception  
  12.     {  
  13.         System.out.println("myInterceptorMethod2:" + ic.getMethod().getName());  
  14.         obj = ic.proceed();      
  15.     }  
  16.     @Override 
  17.     public String greet(String name)  
  18.     {  
  19.         return "hello " + name;  
  20.     }  

上面的Stateful Session Bean中定義了兩個攔截器方法和一個Bean方法。當客戶端調用greet方法時,EJB容器會先調用myInterceptorMethod1方法,然后會調用myInterceptorMethod2方法,最后會調用greet方法。使用攔截器方法時要注意如下幾點:

1.  攔截器方法必須有一個返回值,返回值類型是Object。

2.  攔截器方法只能有一個參數,而且該參數類型必須是javax.interceptor.InvocationContext。

3.  只有調用InvocationContext接口的proceed方法,EJB容器才會調用下一個攔截器方法或被攔截的Bean方法。

4.  由于proceed方法要求拋出一個Exception異常,因此,攔截器方法必須拋出一個Exception異常,或在攔截器方法中使用try...catch來捕捉proceed方法拋出的異常。

二、攔截器類

有一些攔截器方法會攔截器不同Bean中的方法,在這種情況下,需要將攔截器方法放在一個單獨的類中。這個類就叫攔截器類。下面是一個攔截器類的代碼:

  1. package service;  
  2.  
  3. import javax.interceptor.AroundInvoke;  
  4. import javax.interceptor.InvocationContext;  
  5.  
  6. public class MyInterceptor  
  7. {  
  8.     @AroundInvoke 
  9.     public Object interceptorMethod(InvocationContext ic) throws Exception  
  10.     {  
  11.         System.out.println("MyInterceptor:" + ic.getMethod().getName());  
  12.         return ic.proceed();  
  13.     }  
  14. }  

為了使用該攔截器類,需要在SessionBean或MDB中使用@Interceptors來指定要使用的攔截器類。代碼如下:

  1. @Stateful 
  2. @Interceptors(MyInterceptor.class)  
  3. public class GreeterBean implements Greeter  
  4. {  
  5.     @AroundInvoke 
  6.     public Object myInterceptorMethod1(InvocationContext ic) throws Exception  
  7.     {  
  8.         System.out.println("myInterceptorMethod1:" + ic.getMethod().getName());  
  9.         obj = ic.proceed();      
  10.     }  
  11.     @AroundInvoke 
  12.     public Object myInterceptorMethod2(InvocationContext ic) throws Exception  
  13.     {  
  14.         System.out.println("myInterceptorMethod2:" + ic.getMethod().getName());  
  15.         obj = ic.proceed();      
  16.     }  
  17.     @Override 
  18.     public String greet(String name)  
  19.     {  
  20.         return "hello " + name;  
  21.     }  

如果有多個攔截器類,可以使用如下的代碼來指定這些攔截器類:

  1. @Interceptors({MyInterceptor.class, MyInterceptor1.class}) 

如果指定了多個攔截器類和攔截器方法,就涉及到一個調用順序的問題。EJB容器會先調用攔截器類中的攔截器方法、如果有多個攔截器類被指定,按指定的順序進行調用。也就是說,MyInterceptor類中的攔截器方法會最先被調用,然后是MyInterceptor1類中的攔截器方法。最后會調用在Bean中定義的攔截器方法(myInterceptorMethod1和myInterceptorMethod2)。

在默認情況下,攔截器類將攔截所有的Bean方法,但可以使用@ExcludeClassInterceptors注釋來阻止攔截器對某個Bean方法進行攔截。如在GreeterBean類中還有一個getValue方法,那么阻止該方法被攔截的代碼如下:

  1. @ExcludeClassInterceptors 
  2. public String getValue()  
  3. {  
  4.     return "abcd";  

使用@ExcludeClassInterceptors只能阻止攔截器類中的攔截器方法對Bean方法的攔截,而在Bean中定義的攔截器方法仍然會攔截Bean方法。

【編輯推薦】

  1. Eclipse+JBoss+EJB3通過繼承實體Bean將單個表映射成多個表
  2. Eclipse+JBoss+EJB3消息驅動Bean
  3. Eclipse+JBoss+EJB3在Servlet中訪問EntityManager對象
  4. Eclipse+JBoss+EJB3使用命名查詢執行JPQL
  5. Eclipse+JBoss+EJB3實體Bean的連接策略


 

責任編輯:book05 來源: BlogJava
相關推薦

2009-06-24 15:59:04

消息驅動Bean

2009-06-10 11:42:26

Session BeaEclipse+JBo

2009-09-27 17:37:32

Hibernate攔截

2025-02-28 08:14:53

2009-06-10 11:36:45

有狀態的SessionEclipse+JBo

2023-09-05 08:58:07

2009-06-24 15:56:47

實體Bean連接策略

2011-05-16 10:14:11

Hibernate

2011-11-21 14:21:26

SpringMVCJava框架

2025-05-09 08:20:50

2009-07-08 17:02:11

JDK實現調用攔截器

2009-06-24 15:57:44

JPQL命名查詢

2009-06-10 12:34:01

Session BeaEclipse+JBo

2009-06-10 11:09:40

配置文件SessionEclipse+JBo

2009-06-24 15:58:15

EntityManag

2020-03-25 17:55:30

SpringBoot攔截器Java

2009-06-25 15:54:42

Struts2教程攔截器

2012-02-03 13:27:16

2009-02-04 14:19:38

2023-09-15 11:26:16

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩国产中文字幕 | 精品在线一区二区 | 韩国久久精品 | 日韩色视频 | 日本精品一区二区三区在线观看 | 国产91 在线播放 | 欧美在线观看一区 | 精品视频一区在线 | 亚洲最新在线视频 | 国产精品精品久久久久久 | 成人在线观 | 99精品免费视频 | 国产偷久久一级精品60部 | 一级黄色裸片 | 国产一区二区在线免费播放 | 亚洲精品视频在线播放 | 高清成人av | 免费观看视频www | a级大片免费观看 | 中文字幕在线中文 | 日韩网 | 欧美精品一级 | 免费在线观看黄色av | 国产成人精品一区二区三区四区 | 日韩视频在线一区 | 国产高清精品一区二区三区 | 精品一区二区三区av | 日韩伦理一区二区三区 | 激情久久av一区av二区av三区 | 欧美电影在线 | 美女视频黄色的 | 五月天婷婷激情 | 色资源在线 | 午夜精品一区 | 激情视频一区 | 亚洲色图综合 | 国产精品久久久久久妇女 | 国产成人综合一区二区三区 | 成人在线视频一区 | 久久日本 | 欧美精品区 |