2017-09-13 96 views
1

我正在研究攔截器如何在java中工作。我正在使用Netbeans IDE並創建了一個名爲Interceptors的新項目。攔截器的@AroundInvoke未觸發

我創建了一個名爲註釋「登錄」

@Inherited 
@InterceptorBinding 
@Retention(RUNTIME) 
@Target({METHOD, TYPE}) 
public @interface Logged { } 

然後,我創建了一個類「LoggedInterceptor」

@Interceptor 
public class LoggedInterceptor implements Serializable { 

    public LoggedInterceptor() {} 

    @AroundInvoke 
    public Object logMethodEntry(InvocationContext invocationContext) throws Exception 
    { 

     System.out.println("Entering method: " 
       + invocationContext.getMethod().getName() + " in class " 
       + invocationContext.getMethod().getDeclaringClass().getName()); 

     return invocationContext.proceed(); 
    } 
} 

然後我創建了一個類,使使用記錄的註解

public class SuperService 
{ 
    @Logged 
    public String deliverService(String uid) 
    { 
     return uid; 
    } 

    public static void main(String[] args) 
    { 
     SuperService ss = new SuperService(); 
     System.out.println(ss.deliverService("sisi")); 
    } 
} 

什麼都沒有發生。後來,我在src /主/資源/ META-INF /一個XML所謂的beans.xml

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
          http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
    version="1.1" 
    bean-discovery-mode="all"> 
    <interceptors> 
     <class>ascompany.interceptors.LoggedInterceptor</class> 
    </interceptors> 
</beans> 

但logMethodEntry方法文件添加當我打電話deliverService方法不會被調用。我是否缺少一些其他配置文件?還是隻是別的?

我已經嘗試過@priority註釋添加到LoggedInterceptor但什麼都沒有改變......

編輯:

我加logget註解LoggedInterceptor作爲@Luciano範德Veekens說,但什麼都沒有改變

回答

0

您忘記用@Logged註釋LoggedInterceptor類。這實際上將註釋綁定到攔截器。

@Logged 
@Interceptor 
public class LoggedInterceptor implements Serializable { 
} 

它們在Java EE 6教程中的一箇中做相同的操作。

此外它看起來像SuperService只是一個普通的類。攔截器是Java EE概念,只適用於部署在應用程序服務器上的EJB。

+0

我加了......但沒有改變......別的東西? –

+0

@MarcoCastano攔截器只能在部署在應用服務器上的EJB上工作 –

+0

@LucianVanDerVeekens好了,所以我認爲它錯了......感謝您的時間......您知道在此方法執行之前或之後是否有可執行的內容辦法? –