Java 带注释的依赖项注入

Java 带注释的依赖项注入,java,dependency-injection,annotations,Java,Dependency Injection,Annotations,我想基于Java注释构建我自己的定制DI框架,我需要一些指导来开始。我知道使用guice或spring等众多优秀框架中的一个会容易得多,但出于我自己的好奇心,我想构建自己的框架 我对注释不是很熟悉,所以我在查找资源时遇到了一些困难,如果有人能详细说明我开始使用时需要采取的一些步骤,我将不胜感激 如前所述,我想采用工厂方法,以某种方式用@Resource或@Injectable类型注释标记getter,然后在我的业务类中,用@Inject注释设置变量依赖项,并使资源自动可用 是否有人可以传递任何类

我想基于Java注释构建我自己的定制DI框架,我需要一些指导来开始。我知道使用guice或spring等众多优秀框架中的一个会容易得多,但出于我自己的好奇心,我想构建自己的框架

我对注释不是很熟悉,所以我在查找资源时遇到了一些困难,如果有人能详细说明我开始使用时需要采取的一些步骤,我将不胜感激

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

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

编辑

我正在使用的资源将这些整合在一起:

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

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

  • 扫描所有类(或者只是一个特定的类包(我没有 已决定使用@InjectableResource注释方法

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

  • 运行该方法并获取依赖项


  • 注意,在扫描所有类时,我将使用一个名为Javassist的库,这也会很有帮助。基本上,它允许我读取每个类的字节码信息,而无需实际加载该类。因此,我可以读取注释字符串,而不会造成严重的内存问题。

    有趣的是,您希望构建自己的注释字符串。我喜欢GoogleGuice——它让代码变得如此优雅和简单

    我以前使用过它,我发现它对于学习注释以及如何从类和方法中提取注释非常有用

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

    考虑通过反射和单例实现惰性实例化。例如,Guice允许您使用单例,这样您就可以只使用具体类的一个实例,或者每次都可以绑定一个新版本


    祝你好运

    看看以下方法:

    对于、和类也存在同名的方法


    因此,为了使用这些方法,您需要了解一些。

    您可以从标准开始。您将需要某种方法来扫描整个类路径中的资源,其中一种方法是使用类似的工具。最后,您需要一些操作类的方法,例如使用.Great建议。您链接的资源很有用。关于如何将方法(在我的例子中创建资源的getter)实际绑定到注释,有什么见解吗?我知道如何创建自定义注释并在注释中设置access变量,但如何让@Inject将我指向工厂类和特定方法?我还没有构建自己的依赖项注入框架,所以我的方法就是研究Guice是如何做到的。您将需要一个bind方法,它接受接口、注释和具体类。Guice这样做的方式是拥有一个抽象模块,该模块由定义所有绑定的用户定义的具体模块实例化。请看这里: