gpt4 book ai didi

java - Java 注解的工作

转载 作者:行者123 更新时间:2023-12-02 05:49:13 25 4
gpt4 key购买 nike

我想知道我的理解是否正确。我一直在阅读有关注释的内容,并想知道所有的魔法是如何发生的。这就是我认为会发生的事情。否则请告知。

首先,让我们做一些注释。说AssertTrue。现在,javax.validation.constraints 中提供了注释的规范。现在,AssertTrue 实际上并没有做任何事情。即如果我要执行以下操作

public class MyClass{
@AssertTrue(message = "MyMessage")
public myMethod(){
//something
}
}

现在,这段特定的代码不会执行任何操作,只会保存元数据信息,在此方法 myMethod 上我有一些附加信息,即消息和注释。我如何利用这些信息取决于我。

这就是 hibernate-validator 框架发挥作用的地方。

它的作用是提供一堆类并接收应该验证的对象。在该对象上,它将检查 AssertTrue 注释是否存在。如果找到,它将调用 AssertTrueImpl 实现中提供的方法 isValid

这是正在发生的事情吗?

另外,我还有几个问题。假设我有自己的自定义注释,并且我想提供一个检查某些内容的框架。为了便于讨论,假设我想做 hibernate-validator 正在做的事情。现在该怎么做呢?

此外,当 JVM 遇到一些注释时,幕后会发生什么?它是否寻求一些实现?它到底在寻找什么?

即如果 JVM 在我的代码中遇到 AssertTrue 会做什么。当然,它不需要做太多事情,只是存储一些信息,并且它也不必去寻找任何实现,因为每当我调用 validator.validate() 时,它就会寻找 hibernate- validator 实现。

请告诉我我的理解是否正确。

最佳答案

你是对的。注释本身不执行任何操作,它只是处理工具可以使用的元数据。在本例中,Hibernate validator 。

这些工具的通常过程是在类路径上扫描哪些类具有可用于构建或增强类的元数据(通过注入(inject)代理、注册拦截器或任何其他类型的操作)。它们要么扫描类路径,要么通过外部配置机制(xml、json、配置类上的注释 [Spring way])为框架指定这一点,以便框架知道在哪里查找带注释的类。

因此,您也可以按照相同的发现方法从项目注释中受益。事实上,如果您碰巧使用 CDI,您可能会经常使用它们。它们对于 bean 拦截或提供类的元数据非常有用,否则就必须使用大量样板代码进行处理。

我鼓励您充分使用它们。

干杯!

关于java - Java 注解的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23734247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com