从DependencyDescriptor访问“包含类”

时间:2015-11-10 19:16:40

标签: java spring dependency-injection

我正在开发一个用于支持依赖于上下文的注入的实用程序,即注入的内容现在也取决于注入的位置。记录器注入是该技术的常见应用。 到目前为止,我已经成功地为HK2和Guice实现了这个,并且对Dagger有一些限制。 为了解决这个问题,我正在使用一个注册AutowireCandidateResolver的BeanFactoryPostProcessor。但是,为了实现预期的语义,我需要知道实际目标对象的类型,这可能与声明注入点的类型不同。例如:

class BaseClass {
    @Inject Logger logger;
}

class SubClass extends BaseClass {
}

SubClass的实例需要使用SubClass的记录器注入,而不是使用BaseClass的记录器。 DependencyDescriptor在containsClass字段中包含此信息,但遗憾的是,此信息不会通过API公开。

问题1:是否存在未公开此信息的体系结构原因,或者是否可以将此获取添加到DependencyDescriptor API中?

问题2:与此同时,解决此限制的最佳方法是什么?通过Reflection API访问内部字段很难看并且违反了封装。另一种方法是首先注入错误的(即Logger for BaseClass)实例,然后用BeanPostProcessor对其进行纠正,但我会手动重做大量的工作(即重新处理整个注入处理)。

0 个答案:

没有答案