java - 我如何使用通用参数覆盖 EJB 3 session bean 方法 - 如果可能的话?

标签 java generics inheritance jakarta-ee ejb-3.0

<分区>

假设您有以下 EJB 3 接口(interface)/类:

public interface Repository<E>
{
   public void delete(E entity);
}

public abstract class AbstractRepository<E>  implements Repository<E>
{
   public void delete(E entity){
      //...
   }
}

public interface FooRepository<Foo>
{
   //other methods
}

@Local(FooRepository.class)
@Stateless
public class FooRepositoryImpl extends
    AbstractRepository<Foo> implements FooRepository
{
   @Override
   public void delete(Foo entity){
      //do something before deleting the entity
      super.delete(entity);
   }
   //other methods
}

然后是访问 FooRepository bean 的另一个 bean:

//...
@EJB
private FooRepository fooRepository;

public void someMethod(Foo foo)
{
    fooRepository.delete(foo);
}
//...

但是,当 FooRepository bean 的 delete 方法被调用时,覆盖方法永远不会被执行。相反,仅执行 AbstractRepository 中定义的 delete 方法的实现。

我做错了什么,或者这仅仅是 Java/EJB 3 的限制,泛型和继承不能很好地协同工作?

最佳答案

我用 pojo 试了一下,它似乎有效。我不得不稍微修改一下你的代码。 我认为您的界面有点不对劲,但我不确定。

我假设“Foo”是具体类型,但如果不是,我可以为您做更多测试。

我刚刚写了一个 main 方法来测试这个。 希望对您有所帮助!

public static void main(String[] args){
        FooRepository fooRepository = new FooRepositoryImpl();
        fooRepository.delete(new Foo("Bar"));
}

public class Foo
{
    private String value;

    public Foo(String inValue){
        super();
        value = inValue;
    }
    public String toString(){
        return value;
    }
}

public interface Repository<E>
{
    public void delete(E entity);
}

public interface FooRepository extends Repository<Foo>
{
    //other methods
}

public class AbstractRespository<E> implements Repository<E>
{
    public void delete(E entity){
        System.out.println("Delete-" + entity.toString());
    }
}

public class FooRepositoryImpl extends AbstractRespository<Foo> implements FooRepository
{
     @Override
       public void delete(Foo entity){
          //do something before deleting the entity
            System.out.println("something before");
          super.delete(entity);
       }
}

关于java - 我如何使用通用参数覆盖 EJB 3 session bean 方法 - 如果可能的话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801/

相关文章:

javascript - 实例化对象真的只是在 javascript 中以某种方式继承吗?

java - ActionListener 无法识别来自主类的变量

java - 图像加载实际上是如何工作的?

java - 基本 Apache Camel LoadBalancer 故障转移示例

c# - 为什么这个通用扩展方法不能编译?

generics - 在泛型方法中返回原始集合类型

entity-framework - 是否有通用方法来测试数据库中是否存在对象?

java - 使用 JUnit 测试 Controller 和服务的最佳方法是什么?

java - 如何在spring-webflux WebFilter中正确使用slf4j MDC

python - 包装python父类(super class)的所有方法