VinBR

PM 10/10/2011

Oct 18th, 2011
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. // notasdogarcia.blog.com
  2.  
  3. // Ainda estamos falando sobre aspectos.
  4.  
  5. Um aspecto é uma extensão de java que permite acessar a estrutura do código de java já compilado, e inserir um trecho de código nas partes desejadas.
  6. Para isso é realizada uma busca por padrão.
  7.  
  8. um aspecto fica em um arquivo NomeDoArquivo.aj
  9.  
  10. CONCEITOS sobre aspectos:
  11.  
  12. JoinPoint é um ponto onde um aspecto pode ser interceptados,
  13. Pointcuts são os pontos que de fato sao acessados.
  14. Advices é o código que será inserido no pointcut
  15.  
  16. Os join points tem alguns pontos onde eles podem ocorrer, eles não existem em qualquer lugar.
  17. Assim esses pontos são os lugares seguros de se inserir código, e é por isso que eles são especificos, ao invez de ser possível inserir em qualquer lugar.
  18.  
  19. O professor voltou a nós lembrar que isso é pouco usado pois é muito confuso.
  20.  
  21. Um código pode ser inserido de 3 formas:
  22. before,
  23. after,
  24. around
  25.  
  26. Os dois primeiros são bem intuitivos,
  27. porém around significa que o código inserido irá substituir a chamada!
  28.  
  29. public aspect Fallureffand
  30.  
  31. try{
  32. return proceed();
  33. }catch(RemoteExeption ex) { system.out.println("achou um erro"); }
  34.  
  35. Ex: de busca por padrão:
  36.  
  37. !public * Account.*(..)
  38. procure uma coisa nào publica, com qualquer tipo de retorno, de nomeAccount.Qualquer coisa com número indefinido de parâmetros
  39.  
  40. !public * Account.*(*)
  41. O mesmo que o de cima porém com um único parametro sendo ele qualuqer coisa.
  42.  
  43. pointcut setFieldOutsideSetter(): set(int Point.x) && !withincode(void Point.setX(int));
  44.  
  45. public aspect updatinAspect
  46. {
  47. pointcut updatingFigure(Figure f):
  48. call(void Figure+.set*(..)) && target(f);
  49. f.refresh();
  50.  
  51. o f se refere ao "target" ou alvo da chamada de função. Ou seja, se eu tenho uma função dentro de uma classe que está sendo chamada na forma c.função()
  52. O alvo da função é o objeto c que à chamou entendeu?
  53.  
  54. para coferir se f é o target usa-se a funçào target(f)
  55.  
  56. args(val) diz que os argumentos da função devem ficar em val
  57.  
  58. void around(Point p, int val):
  59. call(void Point.set*(int)) && target (p) && args(val)
  60. {
  61. if(val >= 0 && val < 100)
  62. proceed(p, val);
  63. else
  64. proceed(p, 0);
  65. }
  66.  
  67. // proceed continua a execução.
  68.  
  69. // o args(x,y) pega os 2 primeiros argumentos da função.
  70. // no padrão voce pode fazer: if(x<0) || if(y<0)
  71.  
  72.  
Advertisement
Add Comment
Please, Sign In to add comment