모든 예비 검색에서 어느 것이 든 가리 키도록 어떤 것도 되돌려지지 않았기 때문에 다음 사항이 가능한지 여부를 확인하고자합니다.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
을 인스턴스화하는 방법). 그러나이 솔루션이 가능한지, 아니면 스프링인지는 확실하지 않습니다.
미리보기에 올바른 방향으로 약간의 "뾰족 함"을 보내 주셔서 감사합니다!
안녕 군나르 - 감사 입력을 위해 내가 지금 세 가지 링크를 체크 아웃하고 있습니다. 특정 프레임 워크의 일부가 아닙니다. 올바른 도구에 관심이 있다면 일을하십시오! 다시 한 번 감사드립니다. – IAmYourFaja