我试图使用带有注释触发功能的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代理正在工作。
错误在哪里?