You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay PortletMVC中@Reference注解的component.name配置规则咨询

Liferay 7中@Reference注解target属性的component.name设置指南

嗨,我看你正在做Liferay PortletMVC的开发,用@Reference注入MVCActionCommand的路子是对的!关于你疑惑的target = "(component.name=String.Here)"里的String.Here怎么填,我给你说清楚:绝对不能随便写个字符串就完事,它必须和你自定义的MVCActionCommand组件里声明的component.name完全一致,这样OSGi容器才能准确找到你要注入的组件。

具体怎么操作?给你举个实际例子:

  • 先给自定义MVCActionCommand指定component.name
    当你写自己的MVCActionCommand实现类时,得在@Component注解里明确设置component.name属性,这个值就是后面注入时要用到的“标识”。一般推荐用全类名来命名,这样不容易和其他组件重名,比如:

    @Component(
        immediate = true,
        property = {
            "javax.portlet.name=your_custom_portlet_name", // 你的Portlet名称
            "mvc.command.name=/your/action/url/path" // 对应你Portlet里的action路径
        },
        component.name = "com.yourcompany.portlet.MyCustomMVCActionCommand"
    )
    public class MyCustomMVCActionCommand extends BaseMVCActionCommand {
        @Override
        protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
            // 在这里实现你的业务逻辑就好啦
        }
    }
    

    这里的component.name = "com.yourcompany.portlet.MyCustomMVCActionCommand"就是关键,记好这个值。

  • 在注入的地方填写对应的component.name
    然后在你需要注入这个MVCActionCommand的类里,@Reference的target就填上面定义的那个值:

    @Reference(
        target = "(component.name=com.yourcompany.portlet.MyCustomMVCActionCommand)",
        unbind = "-"
    )
    protected MVCActionCommand mvcActionCommand;
    

额外补充一点:

其实除了component.name,你也可以用组件的其他属性来做匹配,比如mvc.command.name,像这样:

@Reference(
    target = "(mvc.command.name=/your/action/url/path)",
    unbind = "-"
)
protected MVCActionCommand mvcActionCommand;

不过用component.name的好处是更精准,万一有多个组件用了同一个mvc.command.name(虽然不推荐这么做),用component.name就能准确找到你要的那个。

要是你随便填个不存在的字符串,OSGi容器找不到对应的组件,注入就会失败,甚至可能导致你的Portlet启动不起来,所以一定要对应好哦!


内容的提问来源于stack exchange,提问作者m.irouch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:22:47