AspectJ的。在多个类中创建内部类型方法

时间:2010-09-17 19:54:56

标签: java aspectj aop aspects

如果我把:

public CountryState CountryState.find(long id) {
        return (CountryState) findById(CountryState.class, id);
}

我正在CountryState类中创建一个方法find。

有没有办法在几个类中创建一个方法?我是否需要为我想要创建的每个类重复代码?

我知道使用方面我可以使一个类继承自另一个,但是,这样做,我可以创建一个超类,因为java不接受多重继承。

2 个答案:

答案 0 :(得分:5)

这种“模式”是你在AspectJ中的表现方式。

声明一个接口:

interface Holder {}

在界面上进行交互式声明:

public int Holder.getMeAnInt() {
  return 42;
}

当您在界面上进行类似声明时,您将提供“默认实现”。因此,接口现在将定义getMeAnInt(),并且任何未实现getMeAnnt()的Holder实现都将获得默认实现。

然后,最后一部分是使用声明父项来指定哪种类型实现您的界面:

declare parents: @Anno * implements Holder;

现在,任何使用@Anno注释的类型都将实现Holder并具有getMeAnInt()方法。

答案 1 :(得分:0)

您可以在不使用AOP的情况下实际解决问题。你可以使用OOP / OOD。有两种方法(我假设你想写一次方法):

  1. 使用方法实现创建抽象基类,并从中派生所有类。实际上,这不是最好的主意。

  2. 创建将实现find()方法并在类之间共享的辅助类(使用依赖注入,或者只是通过紧密耦合)。

  3. 因此,如果我理解正确,您实际需要的是一个泛型方法,它将返回目标类的实例:

    public <T> find(long id, T targetClassObject) {
      Class<? extends T> class = targetClassObject.getClass();
      // do something i.e. call target method via reflection
    }