java - 带注解的依赖注入(inject)

标签 java dependency-injection annotations

我想基于 Java 注释构建我自己的自定义 DI 框架,我需要一些指导才能开始。我知道使用 guice 或 spring 等许多出色的框架之一会容易得多,但出于我自己的好奇心,我想构建自己的框架。

我对注释不是很熟悉,所以我在寻找资源时遇到了一些麻烦,非常感谢有人能详细说明我开始需要采取的一些步骤。

如前所述,id 喜欢采用工厂方法并以某种方式用 @Resource 或 @Injectable 类型注释标记我的 getter,然后在我的业务类中能够使用 @Inject 注释设置我的变量依赖项并拥有资源自动可用。

有没有人有任何类型的资源可以传递来帮助我理解基于注释标记方法然后基于注释从单独的类中检索值的过程。我只需要一点指导,让我开始。当然,我很乐意在这里发布一个小代码示例,当然是为了其他人将来阅读。

编辑

我用来整合这些资源的资源:

Java Reflection: Annotations

How to find annotations in a given package: Stack Overflow ?

Scanning Annotations at Runtime

我实际上还没有写完这篇文章,但是基本的任务列表如下(对于将来可能有兴趣做类似事情的任何人)

  1. 在类运行时扫描所有@Inject 字段并获取对象类型。

  2. 扫描所有类(或只扫描特定的类包(我没有 尚未决定))用于带注释的方法@InjectableResource。

  3. 循环所有带注释的方法并找到返回 我正在寻找的对象类型。

  4. 运行该方法并获取依赖项。

另外请注意,在扫描所有类时,我将使用一个名为 Javassist 的库。基本上这样做是允许我读取每个类的字节码信息而无需实际加载类。所以我可以读取注释字符串而不会产生严重的内存问题。

最佳答案

有趣的是您想构建自己的。我喜欢 Google Guice - 它使代码变得如此优雅和简单。

我用过 this guide在此之前,我发现对于学习注释以及如何将它们从类和方法中提取出来非常有用。

您必须定义自己的注释,这是使用@interface 完成的。然后你将不得不定义某种类来进行绑定(bind),例如您在这个具体类中看到接口(interface)绑定(bind)的位置。最后,您将需要一些逻辑来将其完全拉出,例如遍历每个类,找到每个注释,然后找到合适的绑定(bind)。

考虑诸如通过反射和单例进行惰性实例化之类的事情。例如,Guice 允许您使用单例,因此您只需使用具体类的一个实例,或者每次都可以绑定(bind)一个新版本。

祝你好运!

关于java - 带注解的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9547990/

相关文章:

jakarta-ee - 覆盖事务超时的注释是什么?

java - 这个版本的 findViewById() 是如何工作的?

c++ - 类的抽象成员应该是指针还是引用?

java - 除了明显的错误配置问题之外,还有什么可能导致 Servlet 过滤器出现 ClassNotFoundException?

Java - 无法读取 ØÖ(特殊字符)并打印它

java - Android 抽屉打开只能工作一次

java - Spring 以合格的 bean 为条件

java - 为什么我注入(inject)相同的bean,但实际上注入(inject)了不同的类?

scala @switch 注释,它对生成的字节码有什么影响吗?

java - 如何将数组中的数据写入文本文件?