我已经指定了一个用于 Java bean-validation 的自定义注解。我对所有字段使用相同的注释类,并使用字段名称传递一个字符串参数,如下所示:
@CustomConstraint(value="name")
private String name;
@CustomConstraint(value="address1")
private String addressLine1;
我的约束验证器维护一个 HashMap,它将字符串键(字段名称)映射到我的验证类的接口。我通过将特定字段名称与将用于验证字段的接口的具体子类配对来静态初始化此映射,如下所示:
private static final Map<String, CustomValidatorClass> fieldMapper;
static {
Map<String, CustomValidatorClass> map = new HashMap<String, CustomValidatorClass>();
map.put("name", new NameValidator());
map.put("address1", new Address1Validator());
fieldMapper = Collections.unmodifiableMap(map);
}
我担心这个初始化过程可能非常昂贵(我有几十个字段),并且它可能会为我正在验证的每个字段进行初始化。我希望有某种方法可以指定注释应该初始化一次并重用,或者这是默认行为。
编辑:我使用 JSF 2.0 和 bean-validation,所以我不直接阅读或调用这些注释。这是由框架处理的,这就是为什么我无法准确确定它是如何运行的。