Можно ли реализовать / переопределить абстрактный метод с отражением? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть вопрос по поводу Reflection, но мотивация заключается в использовании Spring Framework.

Рассмотрим этот проект, который является своего рода версией Минимального рабочего примера развернутого проекта.

В классе ProjectionResourceProcessorConfig у меня есть метод entityProjectionResourceProcessor для каждого прогноза, и у каждого объекта в базе данных есть несколько прогнозов. Это около 60 методов.

Я не хочу продолжать это из-за очевидного недостатка в обслуживании. Я хочу использовать Reflection для автоматической регистрации одного компонента для каждого класса проекции.

Метод postProcessBeanDefinitionRegistry в классе ProjectionResourceProcessorConfig показывает, что я могу получить список классов, которые я хочу использовать для регистрации одногоbean для каждого и показывает, как программно зарегистрировать bean.

Однако, поскольку мне нужно использовать класс ProjectionResourceProcessor, мне нужно переопределить метод getEntityClass. Я не смог найти способ сделать это программно. Вот почему я объявил внутренний класс. Он показывает работающую регистрацию программных бинов, но он падает по той же причине, что и фрагмент кода для каждого бина.

Помимо отражения, я попытался использовать метод setMethodOverrides класса RootBeanDefinitionпереопределить этот метод, но я не смог понять, как использовать этот метод. Google не смог найти какую-либо документацию или пример использования (за исключением смутно связанной публикации на китайском языке с копиями на нескольких разных веб-сайтах).

Я также пытался использовать класс MethodReplacer, но не нашел, какиспользуйте его с конфигурацией, управляемой аннотациями.

Я также пытался заменить метод getEntityClass на переменную и заменить ее значение отражением, но, очевидно, когда переменная считывает значение, установленное в суперклассеэто тот, который извлекается.

Чтобы протестировать проект, запустите тесты на DemoApplicationTests. Он напечатает проекцию некоторых объектов. Если у них есть ссылки, это работает.

Можно ли делать то, что я хочу? Если да, то как?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...