ฉันได้อ่านบทความเกี่ยวกับ Interceptors อย่างละเอียดแล้ว a> ในเอกสารตะเข็บ/การเชื่อม และใช้งาน 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
{...}
}
ไม่ ฉันพยายามเปิดใช้งาน Interceptor ใน @Named @ViewScoped
bean:
@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 Interceptors และ @ViewScoped bean แต่จริงๆ แล้ว Interceptors ของฉันทำงานใน ปกติ วิธีการ
@ViewScoped
เฉพาะ JSF มิฉะนั้นจะไม่ทำงานใน@Named
เฉพาะ CDI - person BalusC   schedule 08.11.2012@javax.enterprise.context.SessionScoped
แต่ไม่มีอะไรในระหว่าง@PostConstruct
- person Thor   schedule 09.11.2012