【问题标题】:Seam @Factory in abstract base class?在抽象基类中缝合@Factory?
【发布时间】:2010-06-17 17:19:09
【问题描述】:

我在 Seam 中实现了一系列网络操作,以执行创建、读取、更新等操作。对于我的读取/更新/删除操作,我希望有单独的操作类,它们都扩展了一个抽象基类。我想将@Factory 方法放在抽象基类中以检索要执行的项目。例如,我有这个作为基类:

public abstract class BaseAction {

   @In(required=false)@Out(required=false)
   private MyItem item=null;

   public MyItem getItem(){...}

   public void setItem(...){...}

   @Factory("item")
   public void initItem(){...}
}

我的子类将扩展 BaseAction,这样我就不必重复加载要查看、删除、更新等的项目的逻辑。但是,当我启动我的应用程序时,Seam 会抛出错误,说我有为同一个对象声明了多个@Factory。

有没有办法解决这个问题?有没有办法在基类中提供@Factory 而不会遇到这些错误?

【问题讨论】:

    标签: java inheritance seam abstract-class factory


    【解决方案1】:

    您遇到的问题是每个 Seam 组件都需要一个唯一的名称 - 使用您的方法,每个子类都有一个名为“item”的组件。

    我会做以下事情:

    @Name( "action1" )
    public class Action1 extends BaseAction
    {
      ...
    }
    

    在 components.xml 中:

    <factory name="action1Item" value="#{action1.item}" />
    

    【讨论】:

    • 所以换句话说,我需要将@Factory 向下移动到子类中并以不同的方式命名项目,而不是能够将其拉到基类中。对吗?
    • 是的 - 无论您采用何种方法,只需要确保组件名称是唯一的。
    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2011-12-16
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多