Я хочу посмотреть, возможно ли следующее, так как все предварительные поиски не вернули ничего, чтобы указать в любом случае.
Я хотел бы использовать аннотации Hibernate Validator для проверки методов bean-компонентов, и я хотел бы использовать некоторую структуру AOP (Spring, AOP Alliance, AspectJ и т. Д.) Для перехвата методов, аннотированных подмножеством Аннотации Hibernate Validator (@NotNull
, @NotEmpty
, @Email
и т. Д.); Затем я хочу, чтобы при встрече с ними выполнялся совет АОП.
Возможно ли это сделать? Если так, то мне сложно представить себе, как будет работать код. Использование интерфейса Spring AOP MethodInterceptor
в качестве примера:
Во-первых, bean-компонент, использующий Hibernate Validator:
public class SomeBean
{
private String data;
// Hibernate Validator annotation specifying that "data" cannot be an empty
// string.
@NotEmpty
public String getData() { ... } // etc.
}
Затем код, использующий этот bean-компонент:
public void someMethod()
{
SomeBean oBean = new SomeBean();
// Validation should fail because we specified that "data" cannot be empty.
oBean.setData("");
}
Затем совет АОП, который должен выполняться при обнаружении аннотированных методов Hibernate Validator.
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);
}
}
Таким образом, я не только задыхаюсь от того, как будет выглядеть конфигурация Spring AOP (определения точек и т. Д.), Чтобы перехватывать аннотации Hibernate Validator, которые мне нужны, и я не только не полностью понимаю, как реализовать фактический совет (например, как создайте оскорбительный SomeBean
изнутри совета, как я упоминал выше в комментариях), но я даже не уверен, возможно ли это решение, Spring или иначе.
Заранее благодарим за несколько мягких "подталкиваний" в правильном направлении!