在@Bean方法上使用自定义注释的Spring AOP

时间:2017-02-15 06:32:58

标签: spring spring-aop

我试图使用带有注释触发功能的AOP,正如您在此切入点中所看到的那样

package mypackage.aop;

// ...

@Aspect
@Component
public class ErrorHandlerAspect {

    private final static Logger LOGGER = LoggerFactory.getLogger(ErrorHandlerAspect.class);

    @Pointcut("within(mypackage.config.steps..*) && @annotation(mypackage.aop.SaveAndErrors)")
    private void pointcut(){ }

    @Around("pointcut()")
    private Object errorHandler(ProceedingJoinPoint pjp) throws Throwable{
        try{
            return pjp.proceed();
        } catch (Throwable e){
            LOGGER.error("Handling error");
            throw e;
        }
    }
}

以下是注释声明:

package mypackage.aop;

// ...

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SaveAndErrors { }

...以及@Configuration类中的用法(用于弹簧批处理步骤配置):

package mypackage.config.steps;

// ...

@Configuration
public class StepConfiguration {

    public final static String STEP_NAME = "xStep";

    // ...

    @SaveAndErrors
    @Bean(name="xFileReader")
    @StepScope
    public ItemStreamReader<Object> xFileReader(@Value("#{stepExecutionContext['fileName']}") String resourceName // Inside a partitionner) throws xException {
        try {
            // ...
            // return ...
        } catch (yException e) {
            throw new xException("new Exception :", e);
        }
    }

    // ...

}

我的应用程序类:

@SpringBootApplication
public class Application { //...
}

不幸的是,这不起作用。 删除&amp;&amp;来自切入点的@annotation(mypackage.aop.SaveAndErrors),我的aop代理正在工作。

错误在哪里?

0 个答案:

没有答案