0

我已经开始构建某种 CMS,但我被一个想法困住了。

描述是:

我有标准的 MVC 控制器(主页),我正在下载将在此控制器中设置的模块设置。

响应是,我必须实现名为“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();Spring时,@Resource当我通过Class.forName.

如何解决这个问题?

4

1 回答 1

2

HPModule必须是通过 SpringDI或直接从 Spring检索的Spring Bean BeanFactory。你不能期望 Spring 自动装配一个没有被 Spring 实例化的类,除非你使用@ConfigurableAspectJ编织这个类。

如果HPModule已经是一个 Spring Bean,那么就直接将它@Autowire@Inject它直接放入需要它的 MVC 控制器中。

如果您在编译时不知道您将需要哪些模块,那么注入ListableBeanFactory并使用BeanFactoryUtils以在运行时按类型或名称获取您需要的模块。

于 2012-09-14T12:39:14.363 回答