Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用反射实现/重写抽象方法?_Java_Spring_Reflection - Fatal编程技术网

Java 是否可以使用反射实现/重写抽象方法?

Java 是否可以使用反射实现/重写抽象方法?,java,spring,reflection,Java,Spring,Reflection,我有一个关于反射的问题,但是动机来自于使用Spring框架 以project为例,它是已部署项目的最低工作示例版本 在ProjectionResourceProcessorConfig类中,我对每个投影都有一个entityProjectionResourceProcessor方法,数据库中的每个实体都有一些投影。大约有60种方法 我不想继续这样下去,因为明显的维护缺点。我想使用反射,以便为每个投影类自动注册一个bean ProjectionResourceProcessorConfig类中的po

我有一个关于反射的问题,但是动机来自于使用Spring框架

以project为例,它是已部署项目的最低工作示例版本

ProjectionResourceProcessorConfig
类中,我对每个投影都有一个
entityProjectionResourceProcessor
方法,数据库中的每个实体都有一些投影。大约有60种方法

我不想继续这样下去,因为明显的维护缺点。我想使用反射,以便为每个投影类自动注册一个bean

ProjectionResourceProcessorConfig
类中的
postProcessBeanDefinitionRegistry
方法显示,我可以获得要用于为每个bean注册一个bean的类的列表,并显示如何通过编程注册bean

但是,由于需要使用
ProjectionResourceProcessor
类,因此需要重写
getEntityClass
方法。我还没能找到一种程序化的方法。这就是我声明内部类的原因。它显示了编程bean注册的工作原理,但它与每个bean都需要一段代码的问题是一样的

除了反射之外,我还尝试使用
RootBeanDefinition
类的
setMethodOverrides
方法来重写该方法,但我无法理解如何使用该方法。谷歌找不到任何文档或使用示例(除了在几个不同的网站上有副本的一篇模糊相关的中文帖子)

我还尝试使用
MethodReplacer
类,但还没有找到如何将其用于注释驱动的配置

我还试图用一个变量替换
getEntityClass
方法,并用反射替换变量的值,但显然,当读取变量时,在超类中设置的值就是检索到的值

要测试项目,请在
DemoApplicationTests
上运行测试。它将打印某些实体的投影。如果他们有链接,这是有效的

有可能做我想做的吗?如果是,怎么做


提前感谢。

您不能添加、删除或重写使用反射的方法。您可能可以使用动态代理来完成您想要做的事情,但我认为应该有一种更简单的方法来构造代码,避免这样做。@StephenC关于代码重构,有机会,但我认为这取决于Spring。关于动态代理,这是我不知道的。我来看看。谢谢您不需要使用Spring来实例化所有内容。如果您必须编写大量cookie-cuter代码,以便Spring能够实例化bean,那么您可能应该考虑另一种方法。