UsageLogAspect.java
上传用户:dezhong
上传日期:2022-08-10
资源大小:167k
文件大小:1k
源码类别:

Java编程

开发平台:

Java

  1. package org.springframework.samples.petclinic.aspects;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import org.aspectj.lang.annotation.Aspect;
  6. import org.aspectj.lang.annotation.Before;
  7. /**
  8.  * Sample AspectJ annotation-style aspect that saves
  9.  * every owner name requested to the clinic.
  10.  *
  11.  * @author Rod Johnson
  12.  * @author Juergen Hoeller
  13.  * @since 2.0
  14.  */
  15. @Aspect
  16. public class UsageLogAspect {
  17. private int historySize = 100;
  18. // Of course saving all names is not suitable for
  19. // production use, but this is a simple example.
  20. private List<String> namesRequested = new ArrayList<String>(this.historySize);
  21. public synchronized void setHistorySize(int historySize) {
  22. this.historySize = historySize;
  23. this.namesRequested = new ArrayList<String>(historySize);
  24. }
  25. @Before("execution(* *.findOwners(String)) && args(name)")
  26. public synchronized void logNameRequest(String name) {
  27. // Not the most efficient implementation,
  28. // but we're aiming to illustrate the power of
  29. // @AspectJ AOP, not write perfect code here :-)
  30. if (this.namesRequested.size() > this.historySize) {
  31. this.namesRequested.remove(0);
  32. }
  33. this.namesRequested.add(name);
  34. }
  35. public synchronized List<String> getNamesRequested() {
  36. return Collections.unmodifiableList(this.namesRequested);
  37. }
  38. }