它其實很簡單,可以寫成最簡單的方面。 ;-)
關於您的示例代碼的醜陋之處在於它使用了幾個不顯示源代碼的類,所以我必須創建虛擬類/接口才能編譯代碼。你也不會展示驗證器是如何應用的,所以我必須推測。總之,這裏是一個完全自我一致的樣本類:
Helper類:
這僅僅是爲了使一切編譯腳手架。
package de.scrum_master.app;
public interface Payload {}
package de.scrum_master.app;
public class ConstraintValidatorContext {}
package de.scrum_master.app;
public @interface Constraint {
Class<MyValidator>[] validatedBy();
}
package de.scrum_master.app;
import java.lang.annotation.Annotation;
public interface ConstraintValidator<T1 extends Annotation, T2> {
void initialize(T1 annotation);
boolean isValid(T2 value, ConstraintValidatorContext validatorContext);
}
package de.scrum_master.app;
public class MyValidator implements ConstraintValidator<MyAnnotation, String> {
@Override
public void initialize(MyAnnotation annotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext validatorContext) {
if ("msg".equals(value))
return true;
return false;
}
}
package de.scrum_master.app;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.*;
@Target({ METHOD, FIELD, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = { MyValidator.class })
public @interface MyAnnotation {
String message() default "DEFAULT_FALSE";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
驅動程序:
如果你想測試的東西,你不只是需要一個積極的測試情況下,也一個負面的。因爲你沒有提供,所以用戶Sampisa的回答並不是你想要的。順便說一句,我認爲你應該能夠從中推導出解決方案。你甚至沒有嘗試。你沒有任何編程經驗?
package de.scrum_master.app;
public class Application {
public static void main(String[] args) {
Application application = new Application();
System.out.println(application.validate1());
System.out.println(application.validate2());
}
@MyAnnotation(message = "execute me")
public boolean validate1() {
return true;
}
@MyAnnotation(message = "msg")
public boolean validate2() {
return true;
}
}
看點:
爲什麼我除了Sampisa添加另一個示例方面的唯一原因是,他的解決方案是最理想的關於自己的倒影使用。它很醜,速度很慢。我認爲我的解決方案更加優雅。見自己:
package de.scrum_master.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class SkipValidationAspect {
@Around("execution(@de.scrum_master.app.MyAnnotation(message=\"msg\") boolean *(..))")
public boolean skipValidation(ProceedingJoinPoint thisJoinPoint) throws Throwable {
return false;
}
}
很簡單,不是嗎?
控制檯日誌:
true
false
的Et瞧 - 我想這就是你要找的人。
您需要更改'如果(STR ==「味精」){'使用'等於()' –
怎麼會是「跳躍」的事情將要發生? –
嗨,那是我的問題,如果有可能使用這種驗證,我不知道,如果是可以做到的 –