Внедрить в класс, созданный с помощью отражения - PullRequest
0 голосов
/ 19 сентября 2011

Я хотел использовать свою собственную реализацию StringResourceRepository из среды Velocity. Однако мне нужно использовать в этой реализации внедренный @Repository. Проблема в том, что Velocity создает мой класс с помощью отражения, а затем использует его метод во время инициализации. Из-за этого ссылка на репозиторий является нулевой - ничего не вводится. Что я могу сделать с этим кодом без изменения исходного кода Velocity?

Кажется, что одна возможность - реализовать собственный StringResourceLoader, но мне интересно, есть ли другой способ решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

Spring может выполнять автоматическое подключение Spring к экземпляру, созданному вами самостоятельно, или к экземпляру, созданному сторонней библиотекой, например: WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext (servletContext);wac.getAutowireCapableBeanFactory (). autowireBean (object);

Это требует наличия ServletContext под рукой, так как нет глобальной статики, содержащей корневой WebApplicationContext.

Или если вы устанавливаете скорость вFactoryBean вы можете реализовать WebApplicationContextAware и таким образом получить AutowireCapableBeanFactory.

Другой вариант - использование AspectJ и ткачество времени загрузки.

0 голосов
/ 20 сентября 2011

Взгляните на аннотацию @Configurable, это позволяет Spring вставлять зависимости в объекты, которые не создаются непосредственно в Spring. Чтобы это работало, вам нужно включить ткачество аспекта.

...