没有调用JSF和Spring AOP @Around

时间:2013-08-17 17:41:29

标签: java spring jsf aop

你好,我是Spring AOP的新手。 我写了这样的话:

我的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExceptionHandling {
    String onSuccess();
    String onFailture();
}

Aspect类:

   @Aspect
public class ExceptionHandler implements Serializable {

@Pointcut(value="execution(public * *(..))")
public void anyPublicMethod() {

}


@Around("anyPublicMethod() && @annotation(exceptionHandling)")
    public Object displayMessage(ProceedingJoinPoint joinPoint,ExceptionHandling exceptionHandling) throws FileNotFoundException {
        try{
            Object point = joinPoint.proceed();
            new PrintWriter(new File("D:\\log.txt")).append("FUUCK").flush();
            FacesMessageProvider.showInfoMessage(
                    FacesContext.getCurrentInstance(),exceptionHandling.onSuccess());
            return point;
        } catch(Throwable t) {
              new PrintWriter(new File("D:\\log.txt")).append("FUUCK").flush();
            FacesMessageProvider.showFatalMessage(
                    FacesContext.getCurrentInstance(),
                    exceptionHandling.onFailture());
             return null;
        }

    }
}

来自ManagedBean的方法

@ExceptionHandling(onSuccess=IMessages.USER_UPDATED,onFailture=IMessages.WRONG_DATA)
public void onClickUpdateFromSession(){
   onClickUpdate(sessionManager.getAuthenticatedUserBean());
}

和app-config.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        ">
        <aop:aspectj-autoproxy/>
        <bean id="exceptionHandler" 
              class="eteacher.modules.ExceptionHandler"/> 
        <bean id="sessionManager"
              class="eteacher.modules.SessionManager"
              scope="session"/>





    </beans
  

我正在尝试使用Spring AOP创建异常处理程序   和JSF消息,但它不会激发建议。   请帮帮我。

1 个答案:

答案 0 :(得分:0)

Spring AOP只适用于Spring托管bean,即ApplicationContext中的bean。由于您的JSF bean不是由Spring管理,而是由JSF容器管理,因此AOP部分不起作用。

要使其工作要么使您的JSF托管bean Spring托管bean(请参阅Spring Reference Documentation)或切换到loadtime或编译您的Aspects的编织时间。

关于加载时编织的一个注意事项是,如果在加载Spring上下文之前加载了JSF类,它可能会工作,新注册的自定义类加载器不能修改已加载类的字节码。