2011-10-18 2 views
1

모든 예비 검색에서 어느 것이 든 가리 키도록 어떤 것도 되돌려지지 않았기 때문에 다음 사항이 가능한지 여부를 확인하고자합니다.Spring AOP로 특정 주석을 가로 채기

나는 콩 방법을 검증하기 위해 Hibernate의 검사기 주석을 사용하고 싶습니다, 나는 최대 절전 모드의 부분 집합 주석 방법을 가로 채기 위해 일부 AOP 프레임 워크 (봄, AOP 제휴, AspectJ를, 등)를 사용하고 싶습니다 검사기 주석 (@NotNull, @NotEmpty, @Email 등); 그런 다음 AOP 조언을 받아야합니다.

이 작업을 수행 할 수 있습니까? 그렇다면 코드가 어떻게 작동하는지 시각화하는 데 어려움을 겪고 있습니다.

첫째, 최대 절전 모드 검사기를 사용하여 콩 :

public class SomeBean 
{ 
    private String data; 

    // Hibernate Validator annotation specifying that "data" cannot be an empty 
    // string. 
    @NotEmpty 
    public String getData() { ... } // etc. 
} 

그런 다음, 그 콩 사용하여 일부 코드 : 예를 들어 스프링 AOP의 MethodInterceptor 인터페이스를 사용

public void someMethod() 
{ 
    SomeBean oBean = new SomeBean(); 

    // Validation should fail because we specified that "data" cannot be empty. 
    oBean.setData(""); 
} 

다음은, AOP의 조언은 할 수 Hibernate Validator-annotated 메소드가 발생할 때 실행되었다.

public class ValidationInterceptor implements MethodInterceptor 
{ 
    public Object invoke(MethodInvocation invocation) 
    { 
     // Here's where we would use Hibernate's validator classes. 
     // My code example here is wrong, but it gets the point across. 
     Class targetClass = invocation.getClass(); // Should give me SomeBean.class 
     ClassValidator<targetClass> oValidator= new ClassValidator<targetClass>(); 

     // Here I need to get a reference to the instance of the offending 
     // SomeBean object whose data has been set to empty...not sure how! 
     SomeBean oOffendingBean = getTheBadBeanSomehow(); 

     InvalidValue[] badVals = oValidator.getInvalidValues(oOffendingBean); 
    } 
} 

그래서뿐만 아니라 나는 스프링 AOP가 (포인트 컷 정의 등) 구성이 내가 원하는 최대 절전 모드 검사기 주석을 가로 채기 위해 어떻게 보이는지에 질식하고, 그리고뿐만 아니라 내가하지 완벽하게 구현하는 방법을 파악 않는다 실제 조언 (예 : 댓글에서 위에 언급 한대로 조언 내부에서 위반 SomeBean을 인스턴스화하는 방법). 그러나이 솔루션이 가능한지, 아니면 스프링인지는 확실하지 않습니다.

미리보기에 올바른 방향으로 약간의 "뾰족 함"을 보내 주셔서 감사합니다!

답변

1

Hibernate Validator 4.2에서 소개 된 method validation 기능에 관심이 있습니다.이 기능은 메소드 매개 변수와 반환 값의 유효성 검사를 지원합니다.

그러면이 기능을 CDI와 통합하는 Seam Validation을 사용할 수 있습니다. 스프링과 함께 메소드 유효성 검사를 사용하려면 this 프로젝트를 GitHub에서 볼 수 있습니다.이 프로젝트는 메소드 유효성 검사 기능을 Spring AOP와 통합하는 방법을 보여줍니다 (면책 조항 :이 프로젝트의 작성자이자 Seam Validation 임).

는이 같은 @NotEmpty와 setter 메소드의 매개 변수를 annote해야 작업 귀하의 예제를 만들려면 :

public class SomeBean { 

    private String data; 

    @NotEmpty 
    public String getData() { return data; } 

    public void setData(@NotEmpty String data) { this.data = data; } 

} 
+0

안녕 군나르 - 감사 입력을 위해 내가 지금 세 가지 링크를 체크 아웃하고 있습니다. 특정 프레임 워크의 일부가 아닙니다. 올바른 도구에 관심이 있다면 일을하십시오! 다시 한 번 감사드립니다. – IAmYourFaja