我希望我的类实现一个接口,但我想在一个方面使用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添加到它的方面路径(如果使用编译时编织).