【发布时间】:2023-03-09 07:37:01
【问题描述】:
我想基于 Java 注释构建自己的自定义 DI 框架,我需要一些指导才能开始。我知道使用 guice 或 spring 等众多优秀框架之一会更容易,但出于我自己的好奇心,我想构建自己的。
我对注释不是很熟悉,所以我在寻找资源时遇到了一些麻烦,并且非常感谢有人能说明我需要采取的一些步骤。
如前所述,id 喜欢采用工厂方法并以某种方式使用@Resource 或@Injectable 类型注释标记我的getter,然后在我的业务类中能够使用@Inject 注释设置我的变量依赖项并拥有资源自动可用。
有没有人可以传递任何类型的资源来帮助我理解基于注释标记方法的过程,然后根据注释从单独的类中检索值。我只需要一个小方向,让我开始。当然,一旦我开始工作,我很乐意在这里发布一个小代码示例,当然是为了其他人未来的阅读。
编辑
我用来整理这些的资源:
How to find annotations in a given package: Stack Overflow ?
Scanning Annotations at Runtime
我实际上还没有写完,但基本任务列表如下(对于将来可能有兴趣做类似事情的人)
在类运行时扫描所有@Inject 字段并获取对象类型。
扫描所有类(或只是特定的类包(我没有 尚未决定))用于带注释的方法@InjectableResource。
循环所有带注释的方法并找到返回的方法 我正在寻找的对象类型。
运行方法,获取依赖。
还需要注意的是,在扫描所有类时,我将使用一个名为 Javassist 的库。基本上这样做是允许我在不实际加载类的情况下读取每个类的字节码信息。所以我可以读取注释字符串而不会造成严重的内存问题。
【问题讨论】:
-
你可以从标准的Oracle Annotation Trail开始。您将需要某种方式来扫描整个类路径以查找资源,其中一种方式是使用像 Google Reflections 这样的工具。最后,您将需要一些操作类的方法,例如使用Javassist。
标签: java dependency-injection annotations