我想基于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的库也会很有帮助。基本上它的作用是允许我读取每个类的字节码信息而不实际加载类。所以我可以读取注释字符串而不会产生严重的内存问题。
答案 0 :(得分:0)
有趣的是你想建立自己的。我喜欢Google Guice - 它使代码变得如此优雅和简单。
我使用this guide之前我发现它非常有用于学习注释以及如何将它们从类和方法中拉出来。
您必须使用@interface定义自己的注释。然后你必须定义某种类来进行绑定,例如您在此具体类中看到接口绑定的位置。最后,你需要一些逻辑来完全拉动它,例如浏览每个类,找到每个注释,然后找到合适的绑定。
通过Reflections和singletons来考虑懒惰的实例化。例如,Guice允许您使用单例,因此您只使用具体类的一个实例,或者每次都可以绑定一个新版本。
祝你好运!答案 1 :(得分:0)