java – AspectJ ITDs:实现通用接口

我希望我的类实现一个接口,但我想在一个方面使用ITD提供方法的实现.这可能吗?

接口:

public interface CloningService<T> {
    public T clone(T object);
}

默认实施:

public class DefaultCloningServiceImpl implements CloningService<T> {
    public T clone(T object) {
        // implementation of the clone method
    }
}

具体实施:

public class PersonService implements CloningService<Person> {
    // no code (!)
}

PersonService类将声明它实现了CloningService接口,但是DefaultCloningServiceImpl中将提供方法的实际实现,并且方面会将它们引入PersonService.

我在Eclipse.com上关注了示例,并尝试使用@DeclareParents来实现上述功能.但是,我从AspectJ获得编译器错误,这与泛型有关.这就好像@DeclareParents注释没有预料到泛型会被使用……

谢谢.

解决方法:

我建议您使用代码样式aspectj来解决此问题,而不是注释样式.

这可以通过这样的方面简单地完成:

aspect CloningServiceAspect {
  declare parents : PersonService extends DefaultCloningServiceImpl<Object>;
}

为了使这更通用并附加到注释,您可以执行以下操作:

aspect CloningServiceAspect {
  declare parents : (@CloningService *) extends DefaultCloningServiceImpl<Object>;
}

如果你想将它打包成一个独立的jar,只需确保添加你想编织的所有代码将这个jar添加到它的方面路径(如果使用编译时编织).

上一篇:java – 如何在通知中调用超类方法?


下一篇:java – 使用@Scheduled Spring注释的方法的切入点