我想对某些方法调用应用注释,以便我可以告诉Aspectj修改这些调用的执行。
public interface Door {
void open() throws DoorException;
void close() throws DoorException;
}
public class Ferrari {
@Inject @Lightweight Door door;
public void drive() {
open();
close();
open();
}
}
在这种情况下,我希望所有打开/关闭操作都有效地以相同的方式包装,但是如果我想要一个行为不同的怎么办?
我想做类似的事情:
public class Ferrari {
@Inject Door door;
public void drive() {
door.open();
door.close();
@Slowly door.open();
}
}
我意识到我无法在此处添加注释,但出于同样的原因,我不想破坏开放签名以传递可选的元数据。
最好的方法是什么?
我可以这样做:
public class Ferrari {
@Inject Door door;
public void drive() {
door.open();
door.close();
((@Slowly Door)door).open();
}
}
答案 0 :(得分:0)
我认为您无法做到这一点,如果您想这样做,那么您应该重新考虑代码的组织方式。
我不确定您为什么要这么做,但是有一个猜测可能是,对于一辆特定的法拉利,您想以另一种方式打开车门。然后,您可以将Ferrari类扩展为特定模型,并对Door接口使用其他实现。 我认为您可以通过在春季使用限定符或在Java ee中使用@Named来实现。
如果有帮助,则在下面的链接中有类似的答案。 Injecting multiple implementations to a single service in Spring
答案 1 :(得分:0)
我计划使用2个方面,第一个方面将某些方法标记为“特殊”,然后在注册表中放置一个标志,第二个方面是将所有调用包装到给定的接口,并查看注册表以查看是否该标志已设置。