CDI による傍受は @Named では完全に機能しますが、@ManagedBean では機能しません。
Logable.java
@InterceptorBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Logable {
}
LoggingInterceptor.java
@Logable
@Interceptor
public class LoggingInterceptor {
@AroundInvoke
public Object log(InvocationContext ctx) throws Exception {
//log smth. with ctx.
}
}
WorkingBean.java
@Named
@Logable
public class WorkingBean implements Serializable {
//works : methods will be logged
}
ビーンズ.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<interceptors>
<class>LoggingInterceptor</class>
</interceptors>
</beans>
ViewScopedBean.java
@Logable
@ManagedBean
public class ViewScopedBean implements Serializable {
//doesn't work
}
この種のインターセプターは WebBeans (および EJB) で動作するように意図されていることは承知していますが、同じインターセプターの概念を持つ両方の世界 (記述 + JSF)のソリューションを探しています @ViewScoped @ManagedBean が必要です。純粋な WebBeans を支持して @ManagedBean を取り除くことはできません
システム: Mojarra 2.1.7 Primefaces 3.2