我们需要移除代码中使用的几乎所有框架。我从Hibernate的@NotEmpty开始。这是唯一从Hibernate使用的类,所以我们认为它是最容易解决的问题。
我编写了以下实现:
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.FIELD;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.ReportAsSingleViolation;
@Documented
@Constraint(validatedBy = {})
@Target({ FIELD })
@Retention(RUNTIME)
@ReportAsSingleViolation
@NotNull
@Size(min = 1)
public @interface NotEmpty {
public abstract String message() default "Field has to be filled";
}
当然,它还应该被测试。因此,我编写了以下测试:
import org.junit.Test;
class NotEmptyClass {
@NotEmpty
String notEmpty;
NotEmptyClass(String value) {
notEmpty = value;
}
}
public class NotEmptyTest {
@Test
public void firstTest() {
new NotEmptyClass(null);
}
}
我原本认为这个测试不应该通过,但实际上却通过了。显然我做错了什么,但我不知道是什么(这是我第一次使用注释)。我查找了一些资料,但一直没有进展。如果有人能指点一下方向的话……
============
我写了一个更好的版本,并在GitHub上发布了它:我的Java注释示例。
at javax.validation.Validation$GenericBootstrapImpl.configure
(Validation.java:175)
at javax.validation.Validation.buildDefaultValidatorFactory
(Validation.java:50) - Cecil Westerhof