Я внимательно прочитал статью о перехватчиках в документации по шву/сварке и реализовал InterceptorBinding
:
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyLog {}
и класс Interceptor
:
@MyLog @Interceptor
public class ErpLogInterceptor implements Serializable
{
@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext) throws Exception
{..}
@PostConstruct
public Object logPostConstruct(InvocationContext invocationContext) throws Exception
{...}
}
Нет, я пытался активировать перехватчик в бине @Named @ViewScoped
:
@javax.inject.Named;
@javax.faces.bean.ViewScoped
public class MyBean implements Serializable
{
@PostConstruct @MyLog
public void init()
{...}
@MyLog public void toggleButton()
{..}
}
Если я нажимаю кнопку на своей странице JSF, метод toggleButton
вызывается правильно, и вызывается метод Interceptor logMethodEntry
. Но похоже, что метод @PostConstruct
(который меня интересует) никогда не перехватывается моим классом.
Вопрос, похоже, связан с перехватчиками Java EE и bean-компонентом @ViewScoped, но на самом деле мой перехватчик работает нормально методы.
@ViewScoped
, специфичный для JSF, иначе просто не работает в@Named
, специфичный для CDI. - person BalusC   schedule 08.11.2012@javax.enterprise.context.SessionScoped
, но ничего в течение@PostConstruct
- person Thor   schedule 09.11.2012