我想对某些方法调用应用一个注释,这样我就可以告诉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();
}
}
发布于 2018-10-18 06:26:51
我不认为你可以做到这一点,如果你想这样做,那么也许你应该重新考虑你是如何组织你的代码的。
我不知道你为什么要这样做,但有一种猜测是,也许对于某个特定的法拉利来说,你想以另一种方式打开车门。然后,您只需为特定型号扩展Ferrari类,并为Door接口使用不同的实现。我想你可以通过在spring中使用限定符或者在Java ee中使用@Named来做到这一点。
下面的链接中有类似的答案,如果它有帮助的话。Injecting multiple implementations to a single service in Spring
发布于 2018-10-18 09:17:54
我计划使用两个方面,一个是将某些方法标记为“特殊”,然后在注册表中放置一个标志,第二个是包装对给定接口的所有调用,并查看注册表中是否设置了该标志。
https://stackoverflow.com/questions/52864182
复制相似问题