如何扩展 Spring Data JPA @Query 方法注释?
从这篇文章http://www.javacodegeeks.com/2012/08/hibernate-native-sql-features-into-your.html我学习了如何扩展 Spring 数据 JPA 功能,不幸的是文章讲述了 ElementType.TYPE 注释,但我需要了解 ElementType.METHOD 注释以及这个带注释的方法将如何由 spring data jpa 注册和处理。
11052012 1547 -- 我对如何处理方法注释做了进一步的研究,我发现我需要使用 AOP 来使用我的自定义注释处理器拦截原始方法调用。
我做了这个
@NoRepositoryBean
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Dynaque {
String value() default "";
}
@NoRepositoryBean
@Aspect
@Component("dynaqueAopListener")
public class DynaqueAopListener {
@Pointcut("@annotation(my.repo.engine.package.Dynaque)")
public void dynaqueMethods() {
}
@Around("dynaqueMethods()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
Method m = ((MethodSignature) pjp.getSignature()).getMethod();
Dynaque d = null;
if (m != null) {
d = m.getAnnotation(Dynaque.class);
}
Object output = pjp.proceed();
//my custom query logic here
return output;
}
}
然后我遇到了下一个障碍,我发现 SD JPA 扫描每个存储库接口的所有方法并使用 QueryLookupStrategy 对它们进行 QueryLookup,我不知道如何从 SD - JPA QueryLookup 中排除使用 @Dynaque 注释的方法,以便我可以实现我自己对该方法的查询逻辑。