Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

MultiDispatchCp.java 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import org.aspectj.testing.Tester;
  2. public class MultiDispatchCp {
  3. public static void main(String[] args) {
  4. C c = new C();
  5. Tester.event("**** exec ****");
  6. MultiExec.enabled = true;
  7. run(new C());
  8. Tester.event("**** call ****");
  9. MultiExec.enabled = false;
  10. MultiCall.enabled = true;
  11. run(new C());
  12. Tester.event("**** both=call ****");
  13. MultiExec.enabled = true;
  14. run(new C());
  15. Tester.checkEventsFromFile("MultiDispatchCp.out");
  16. //Tester.printEvents();
  17. }
  18. static void run(C c) {
  19. Tester.event(c.doit("s1"));
  20. Tester.event(c.doit(new Integer(10)));
  21. Tester.event(c.doit(new Double(1.25)));
  22. Object o;
  23. o = "s2"; Tester.event(c.doit(o));
  24. o = new Integer(20); Tester.event(c.doit(o));
  25. o = new Double(2.25); Tester.event(c.doit(o));
  26. }
  27. }
  28. class C {
  29. String doit(Object o) {
  30. return "did-" + o.toString();
  31. }
  32. }
  33. abstract aspect Multi {
  34. abstract pointcut m();
  35. abstract String getPrefix();
  36. String around(String s): m() && args(s) {
  37. return getPrefix() + "-string-" + s;
  38. }
  39. String around(Integer i): m() && args(i) {
  40. //System.out.println(thisJoinPoint + " would return " + proceed(i));
  41. return getPrefix() + "-integer-" + i;
  42. }
  43. String around(Double d): m() && args(d) {
  44. return getPrefix() + "-double-" + d;
  45. }
  46. }
  47. aspect MultiCall extends Multi {
  48. public static boolean enabled = false;
  49. String getPrefix() { return "call"; }
  50. pointcut m(): call(String C.doit(Object)) && if(enabled);
  51. }
  52. // dominates should have no effect as call join points
  53. // always come before executions
  54. aspect MultiExec extends Multi { declare dominates: MultiExec, MultiCall;
  55. public static boolean enabled = false;
  56. String getPrefix() { return "exec"; }
  57. pointcut m(): execution(String C.doit(Object)) && if(enabled);
  58. }