【发布时间】:2014-05-19 09:30:19
【问题描述】:
我想知道我的判断是否正确。我一直在阅读有关注释的内容,并想知道所有魔术是如何发生的。这就是我认为会发生的事情。否则请告知。
首先,让我们做一些注释。说AssertTrue。现在,注释的规格在javax.validation.constraints 中提供。现在,因此,AssertTrue 并没有真正做任何事情。即如果我要执行以下操作
public class MyClass{
@AssertTrue(message = "MyMessage")
public myMethod(){
//something
}
}
现在,这段特殊的代码除了保存元数据信息之外什么都不会做,在这个方法 myMethod 我有一些额外的信息,即消息和注释。我如何使用这些信息取决于我。
这就是hibernate-validator框架出现的地方。
它的作用是,它提供了一堆类,并接收应该被验证的对象。在该对象上,它将检查 AssertTrue 注释是否存在。如果找到,它将调用AssertTrueImpl 的实现中提供的方法isValid。
这是怎么回事?
另外,我有几个问题。假设我有自己的自定义注释,并且我想提供一个检查某些内容的框架。为了争论,假设我想做hibernate-validator正在做的事情。现在该怎么做呢?
另外,当JVM遇到一些注解时,幕后会发生什么?它是否在寻找一些实现?它到底在寻找什么?
即如果在我的代码中遇到AssertTrue,JVM 会做什么。当然,它不需要做太多事情,只需要存储一些信息,而且它也不必去寻找任何实现,因为每当我调用 validator.validate() 时,它都会寻找 hibernate-validator 实现。
如果我理解正确,请告诉我。
【问题讨论】:
-
您在这里的一个问题太多了,但您大体上是正确的:注释只是由库在编译或运行时读取(查看不同的保留选项),然后对类进行操作,一般使用反射。 JVM 不会主动对注解做任何事情;您需要运行一些库来查找它们。
标签: java hibernate validation annotations