如何扩展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扫描每个Repository Interface的所有方法,并使用QueryLookupStrategy对它们进行QueryLookup,我不知道如何排除使用SD中的@Dynaque注释的方法 - JPA QueryLookup,这样我就可以实现自己的查询逻辑那种方法。