我很难区分所有这些注释工具和它们的用例。尽管文献令人困惑,但我的猜测是:
>
自定义注释在运行时保留策略中被用作标记,通过Reflection API进行解释
注释处理用于类(用于编译时的静态检查)和源(用于源生成)保留策略
AOP旨在在运行时修改代码
那么,自定义注释和AOP在运行时保留策略之外有意义吗?注释处理在类/源保留策略之外有意义吗?AOP和自定义注释之间的区别是否仅仅是因为LATER是被动的(为了做一些事情,需要将注释对象作为参数接收)?为什么需要像Checker这样的框架?
>
注解只是向类、方法、字段或方法参数添加信息的Java语法手段。有三种保留类型指定注解的可用位置:
SOURCE
表示注释仅在源代码中,并在编译过程中被丢弃
CLASS
表示注释在类文件中,可用于编译后的字节码处理步骤。这是默认值
RUNTIME
意味着您可以通过反射在运行时读取注释
注释处理使您能够从源代码中读取注释(即,即使是那些具有源代码
保留的注释),并使用这些信息来生成更多的源代码,这些代码可以在以后编译。这是一种预处理步骤,帮助您自动创建锅炉铭牌代码,而不是手动键入。
AOP(面向方面的编程)是一个无关的概念,请阅读维基百科,以便了解更多。它不是为了修改你的代码,而是通过将交叉关注点编织到你的主要应用程序逻辑中来修改它的行为。有几种方法可以实现和应用AOP,例如
顺便说一句,Spring AOP或AspectJ等AOP工具可以访问运行时
注释。这并不意味着您需要使用注释来将方面应用到代码中,它们只是在应用程序逻辑中标记和标识应该应用方面的连接点的几种方法之一。
此外,AspectJ编译器还支持注释处理步骤,例如,您可以编写注释处理器,在编译之前从源代码注释创建新的方面或应用程序类。
为了更详细地解释所有这些,我需要写一系列的文章或一本书,所以请从这里开始,通过阅读其他网站或书籍来了解这些概念。
我想编写自定义Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html.但是当前的lombok jar文件并不包含很多内容。类文件,但文件名为。症状自评量表。取而代之的是龙目山。 我发现,的。SCL. lombok文件是. class文件,Lombok的构建脚本在生成jar文件时重
问题内容: 我想编写自定义的Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok- creating-custom.html 。但是当前的lombok jar文件并不包含许多.class文件,而是包含名为.SCL.lombok的文件。 我发现.SCL.lombok文件是.class文件,Lombok的生成脚本在生成ja
问题内容: 问题: 1)和之间的区别? 我已经读过,两者都消除了将连接代码放入XML中的必要性,但是并没有获得两者之间的区别。 2)之间有什么区别,和? -何时使用哪个? -每个优点/缺点是什么? 问题答案: 并且确实是非常不同类型的注释。 以及类似的注释(,等)及其对应的JSR-330允许您声明要通过自动扫描拾取的bean , 或者它们为类注册了bean定义,因此它们大致等效于使用以下命令声明指
我正在编写一个库/sdk,它可以拦截任何使用自定义注释进行注释的方法。代码的工作方式有点像这样 截取这个的方面有一个切入点表达式 当我在与相同的包中描述方面时,此代码工作正常。但是,如果我创建一个单独的库并定义方面,因为它无法拦截。有帮助吗? 回应@Bond的评论 Spring版本:Spring上下文-4.1.7。发布aspectj-1.6.5问题的关键是注释不会在同一个项目中使用。在编译之后,它
我试图使用@consume注释bean使用通过spring JmsTemplate发送的JMS消息。当使用JMSTemplate发送消息时,使用者不接收消息。 然而,当使用Camel的ProducerTemplate发送时,将接收消息。 @org.springframework.jms.annotation.jMSListener和@org.apache.camel.consume之间有什么区别?
我使用抽象处理器创建了一个自定义注释和注释处理器。这意味着我想在编译之前进行注释处理。我将自定义注释和处理器导出为Jar,并尝试将其与简单的java测试程序一起使用。我确信在编译时它会找到我的java处理器类,但不知何故,我并没有得到我在控制台上期望的o/p。下面是我的处理器中处理方法的代码。 此外,我故意使用以便我得到一个版本警告,它确认当我执行一个测试类时,它找到了我的注释处理器。 这里是我的