我有一个关于反射的问题,但是动机来自使用Spring Framework。
考虑this项目,这是已部署项目的最低工作示例版本。
在ProjectionResourceProcessorConfig
类中,每个投影都有一个entityProjectionResourceProcessor
方法,数据库中的每个实体都有几个投影。大约有60种方法。
由于明显的维护缺点,我不想继续这样做。我想使用反射来为每个投影类自动注册一个bean。
postProcessBeanDefinitionRegistry
类中的ProjectionResourceProcessorConfig
方法表明,我可以获得要用来为每个bean注册一个bean的类的列表,并说明了如何以编程方式注册bean。
但是,因为我需要使用ProjectionResourceProcessor
类,所以我需要重写getEntityClass
方法。我还无法找到以编程方式执行此操作的方法。这就是为什么我声明了内部类。它显示了程序化bean注册的工作原理,但与每个bean都需要一段代码的问题相同。
除了反思之外,我尝试使用setMethodOverrides
类的RootBeanDefinition
方法来覆盖该方法,但是我无法理解如何使用该方法。 Google找不到任何文档或用法示例(带有模糊关联的中文帖子,其副本在多个不同的网站上除外)。
我也尝试使用MethodReplacer
类,但是还没有找到如何在注释驱动的配置中使用它。
我还尝试用一个变量替换getEntityClass
方法,并通过反射替换该变量的值,但是很显然,当读取该变量时,在超类中设置的值就是被检索到的值。 / p>
要测试项目,请在DemoApplicationTests
上运行测试。它将打印某些实体的投影。如果他们有链接,那就可以了。
可以做我想做的事吗?如果是,怎么办?
谢谢。