Перехват с 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
}
beans.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
}
Я знаю, что этот тип Interceptor предназначен для работы с WebBeans (и EJB), но я ищу решение для обоих миров (описанных + JSF) с той же концепцией Interceptor, которая мне нужна @ ViewScoped @ManagedBean, вот почему я не могу избавиться от @ManagedBean в пользу чистых WebBeans
Система: Mojarra 2.1.7 Primefaces 3.2