我正在使用JBoss 7.1構建Java EE應用程序。Java EE攔截器和@ViewScoped bean
爲了獲得對用戶操作的全面審計,我打算使用攔截器來記錄我的bean方法的每個調用。
要做到這一點,我有以下招標:
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Logged {
}
然後我定義我的攔截器類:
@Logged
@Interceptor
public class UserActionInterceptor implements Serializable {
private static final long serialVersionUID = 1L;
private Logger log = LoggerFactory.getLogger(UserActionInterceptor.class);
public UserActionInterceptor() {
}
@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext) throws Exception {
log.debug(invocationContext.getMethod().getName() + " invoked.");
return invocationContext.proceed();
}
}
到目前爲止,這是工作的罰款。如果我使用這個攔截器綁定一個類,我會得到一些日誌記錄。然而,當我想要定位我的bean類時,它會變得更加棘手。
如果我有一個類型爲@RequestScoped的bean並將其綁定到我的攔截器,它就可以工作。但是,如果我有@ViewScoped類型的bean,那麼它不會。
我擡頭@ViewScoped的定義,我發現:
@Retention(value=RUNTIME)
@Target(value=TYPE)
@Inherited
public @interface ViewScoped
我有一個問題在於這樣一個事實:這個註釋沒有目標類型的方法,它的感覺阻止我的攔截器攔截對類方法的調用。
有沒有人有過同樣的問題?有人知道是否可以擴展bean的範圍,以便在不改變@ViewScoped的性質的情況下攔截它的方法?