2017-09-13 8 views
1

자바에서 인터셉터가 작동하는 방식을 연구하고 있습니다. 나는 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")); 
    } 
} 

아무 일도 없었습니다. 나중에 내가 deliverService 메서드를 호출 할 때 호출되지 않습니다

<?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 방법 beans.xml 환경이라고 SRC/메인/자원/META-INF/xml 파일 아래에 추가. 다른 설정 파일이 누락 되었습니까? 아니면 그냥 다른 것?

는 이미 ... LoggedInterceptor하지만 아무것도 변경에 @Priority 주석을 추가하려고

편집 : 나는 @Luciano 반 데르 Veekens로 LoggedInterceptor에 logget 주석을 추가 말했지만 아무것도

답변

0

을 변경하지

LoggedInterceptor 클래스에 @Logged이라는 주석을다는 것을 잊었습니다. 이것은 실제로 주석을 인터셉터에 바인드합니다.

@Logged 
@Interceptor 
public class LoggedInterceptor implements Serializable { 
} 

Java EE 6 자습서 중 하나에서 동일합니다.

또한 SuperService은 일반 클래스 일뿐입니다. 인터셉터는 Java EE 개념이며 응용 프로그램 서버에 배포 된 EJB에서만 작동합니다.

+0

나는 그것을 추가했다. 그러나 아무것도 바뀌지 않았다. .. 그 밖의 무엇인가? –

+0

@MarcoCastano 인터셉터는 응용 프로그램 서버에 배포 된 EJB에서만 작동합니다. –

+0

@LucianVanDerVeekens ok 그래서 잘못 생각했습니다 ... 시간 내 주셔서 감사합니다 ...이 경우 메소드 실행 전후에 실행할 수있는 것이 있는지 알고 있습니다. 방법? –