Весенний динамический автосервис

Я начал создавать какую-то CMS и застрял на одной идее.

Описание:

У меня есть стандартный контроллер MVC (Home), в котором я загружаю настройки модулей, которые будут установлены в этом контроллере.

В ответ я должен реализовать модуль с именем "HPModule".

Поэтому я пытаюсь загрузить этот модуль Class.forName("com.app.something.HPModule"); а затем вызвать метод init();

Мой HPModule это:

public class HPModule
{

    @Resource(name = "hpModuleService")
    private HPModuleService hpModuleService;

    public String init()
    {
        SomeObject someObject = hpModuleService.getArticle();
    }
}

И я обнаружил, что когда я пытаюсь сделать SomeObject someObject = hpModuleService.getArticle(); Весна слепа для @Resource когда я звоню в класс Class.forName,

Как решить эту проблему?

1 ответ

HPModule должен быть Spring Bean, полученным с помощью DI или прямо из весны BeanFactory, Вы не можете ожидать, что Spring автоматически связывает класс, который не был создан Spring, если вы не используете @Configurable а также AspectJ ткать класс.

Если HPModule уже является бобом, чем просто @Autowire или же @Inject это непосредственно в контроллер MVC, который нуждается в этом.

Если вы не знаете во время компиляции, какие модули вам понадобятся, чем внедрить ListableBeanFactory и использовать BeanFactoryUtils чтобы получить нужные вам модули во время выполнения по типу или по имени.

Другие вопросы по тегам