如何扩展Spring Data JPA @Query方法注释

时间:2012-11-02 10:33:38

标签: spring jpa annotations customization spring-data-jpa

如何扩展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,这样我就可以实现自己的查询逻辑那种方法。

0 个答案:

没有答案