Spring动态autowire服务

时间:2012-09-14 12:29:10

标签: spring autowired

我已经开始构建某种类型的CMS,但我仍然坚持一个想法。

描述如下:

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

响应是,我必须实现名为“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 个答案:

答案 0 :(得分:2)

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

如果HPModule已经是一个Spring Bean,而不仅仅是@Autowire@Inject它直接进入需要它的MVC控制器。

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