kotlin中要在java类中使用的aop

62lalag4  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(388)

我´我在kotlin中实现了一个库,它将从java使用。可以在kotlin中创建注解和aop代码,然后从java使用+
如果可能的话,一个文档或例子,这将是可怕的。我找不到有这种互操作性的东西。
当做。

cs7cruho

cs7cruho1#

至于注解,在kotlin中实现它应该没有任何问题。
至于方面,当用kotlin编译器编译时,它最终将成为一个具有所有必要@aspectj注解的常规jvm类,但它将不是一个方面,因为它不是由aspectj编译器编译的,到目前为止,aspectj编译器只理解java源代码。
如果您通过ltw(加载时编织)使用这样一个“未完成”的方面,那么aspectjweaver可以在加载时将其完成为一个方面,这样场景就可以工作了。
在尝试使用未完成方面进行编译时或针对java(或kotlin)目标类进行二进制编织的情况下,使用aspectj编译器完成未完成方面的中间步骤是必要的,但我从未尝试过,也不知道这是否可能。尝试一下会很有趣。我不会说kotlin,但是如果你有一些东西可以让我开始,比如一个示例项目,最好是用maven构建的,那也许会很有趣。如果有任何方法可以做到这一点,我们最终会使用aspectjmaven插件,就像@dreamcrash所建议的那样,只是以一种不同的方式。
顺便说一句,我需要你提供更多关于“从java使用”的信息。请详细说明。
更新:我只是快速尝试了一下:
kotlin中的注解+纵横比
使用kotlin编译器编译到类路径上的my-aspect.jar、aspectjrt.jar中
将kotlin类打包到jar中
使用kotlin方面jar的注解的java类
在inpath上使用ajc、my-aspect.jar,在类路径上使用aspectjrt.jar和kotlin-stdlib.jar进行编译。
结果是,例如在bin目录中,jar中的java类和两个kotlin类,但是aspect这次是由ajc完成的(比原始类文件大)。
在类路径上使用bin文件夹、aspectjrt.jar和kotlin-stdlib.jar运行java程序。
效果很好,效果不错。
剩下的唯一一步是结合aspectj maven插件“mavenise”,这应该相当容易。但您的问题的答案是:是的,您可以在kotlin中实现一个方面,并将其与java目标类结合使用。当然,缺点是类路径上需要kotlin标准库,而不是像往常一样只需要aspectj运行时。
更新2:我为自己和你的方便创建了一个maven多模块Playground项目。只需克隆我的github存储库,然后根据readme文件构建和运行。

相关问题