5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】BeanValidationに存在するアノテーションの実装クラスはどこにあるのか

Posted at

背景

JavaやSpringでバリデーションを実装する際には@NotNull@NotBlankといったBeanValidationを用いることがあると思います。

実装をしている際に、これらのアノテーションに紐づいている実装クラスはどのようになっているのだろうかと思い、ソースコードを見てみたのですが、@ConstraintのvalidatedByが空白でした。

javax.validation.constraintsパッケージのNotBlankアノテーション1を例に出しておきます。

NotBlank.java
@Documented
@Constraint(validatedBy = { }) // ←でバリデーションの中身が書かれたクラスが指定されていない
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
public @interface NotBlank {

	String message() default "{javax.validation.constraints.NotBlank.message}";

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };

	/**
	 * Defines several {@code @NotBlank} constraints on the same element.
	 *
	 * @see NotBlank
	 */
	@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
	@Retention(RUNTIME)
	@Documented
	public @interface List {
		NotBlank[] value();
	}
}

今回はこのアノテーションの実装結果の場所と紐付けをしているクラスを調べました。

調査結果

Googleで検索してみると、こちらのstackoverflowで同様の質問がされており、実装クラスを知ることができました。

それがこちらのorg.hibernate.validator.internal.constraintvalidators.bv配下のNotBlankValidatorクラスです。

このことからアノテーションとその実装クラスは同じライブラリではなく、別のライブラリに存在しているということがわかりました。

また、これらを紐付けているクラスは実装クラスと同じライブラリに存在し、こちらのorg.hibernate.validator.internal.metadata.core配下のConstraintHelperクラスで紐づけられていることがわかりました。

まとめ

今回、BeanValidationのjavax.validation.constraintsに存在するアノテーションの実装クラスはorg.hibernate.validator.internal.constraintvalidators.bv配下に存在しているということがわかりました。

また、これらのクラスはorg.hibernate.validator.internal.metadata.core配下のConstraintHelperクラスで紐づけられていることがわかりました。

ただ、なぜアノテーションと実装クラスがわざわざ別のライブラリに存在しているのかがわかっていません。
BeanValidationとHibernateの関係性が関わっていそうな雰囲気はしますが、拡張性を考慮してインターフェースと実装を分けるような感覚なのでしょうか?

この点に関してご存知の方がいらっしゃいましたらご教示いただけますと幸いです。

最後までお読みいただき、ありがとうございました。

参考文献

解決のきっかけになったサイト

NotBlankValidator.java

ConstraintHelper.java

  1. jakarta.validation-api-2.0.1

5
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?