gpt4 book ai didi

java - Guice 如何填充带注释的字段

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:19 24 4
gpt4 key购买 nike

为了我自己的教育,我想构建一个简单的依赖注入(inject)框架,其功能类似于 Google 的 Guice。因此,当加载一个类时,它会使用来自工厂类的数据预填充带注释的字段。

我正在使用 Reflections 在编译时扫描我所有的工厂类,并将这些类保存在一个静态列表中,这样当需要加载我的类时,我有一个对我的工厂的引用,然后我可以扫描方法并返回适当的数据。

我遇到的问题是如何预填充我的类注释字段,而无需在实际类中实际执行任何工作。换句话说,当加载一个类时,我需要能够确定是否有任何字段使用特定注释进行注释,如果是,则从工厂类中检索值。

有没有什么方法可以在加载类之前对其进行反射,预填充特定字段,然后返回该类的实例以供使用?

我可以使用完成所有这些工作的基类来扩展所有需要依赖注入(inject)的类,但我认为必须有更好的方法,以便我可以简单地使用 @Inject(或我决定使用的任何注释)过去常常说这个领域需要 DI) 并且“神奇地”完成了所有工作。

最佳答案

Guice 处理此问题的方式是它只会填充由 Guice 本身创建1 的实例的字段。注入(inject)器在创建实例后,可以使用反射 API 查看 Class 的字段并使用 Field.getDeclaredAnnotations() 检查它们的注释.

这也是为什么当你想注入(inject)一个静态字段时,你需要使用Binder.requestStaticInjection()的原因。填充静态字段。

Guice 不会简单地扫描您的代码以获取注释;所有注入(inject)都从显式请求递归(例如 requestStaticInjection()Injector.getInstance() 等)。现在通常会在某些库代码中提出最初的、明确的请求。

例如,如果您正在使用 guice-servlet,您可以让 Guice 通过使用 serve().with() 调用来创建您的 servlet 实例。但是,如果您不这样做,而是将您的 servlet 配置留在 web.xml 中,Guice 将不会注入(inject)您的 servlet。

1 - 您还可以使用 Binder.requestInjection() 请求显式注入(inject)。

关于java - Guice 如何填充带注释的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9568514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com