Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // notasdogarcia.blog.com
- // Ainda estamos falando sobre aspectos.
- 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.
- Para isso é realizada uma busca por padrão.
- um aspecto fica em um arquivo NomeDoArquivo.aj
- CONCEITOS sobre aspectos:
- JoinPoint é um ponto onde um aspecto pode ser interceptados,
- Pointcuts são os pontos que de fato sao acessados.
- Advices é o código que será inserido no pointcut
- Os join points tem alguns pontos onde eles podem ocorrer, eles não existem em qualquer lugar.
- 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.
- O professor voltou a nós lembrar que isso é pouco usado pois é muito confuso.
- Um código pode ser inserido de 3 formas:
- before,
- after,
- around
- Os dois primeiros são bem intuitivos,
- porém around significa que o código inserido irá substituir a chamada!
- public aspect Fallureffand
- try{
- return proceed();
- }catch(RemoteExeption ex) { system.out.println("achou um erro"); }
- Ex: de busca por padrão:
- !public * Account.*(..)
- procure uma coisa nào publica, com qualquer tipo de retorno, de nomeAccount.Qualquer coisa com número indefinido de parâmetros
- !public * Account.*(*)
- O mesmo que o de cima porém com um único parametro sendo ele qualuqer coisa.
- pointcut setFieldOutsideSetter(): set(int Point.x) && !withincode(void Point.setX(int));
- public aspect updatinAspect
- {
- pointcut updatingFigure(Figure f):
- call(void Figure+.set*(..)) && target(f);
- f.refresh();
- 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()
- O alvo da função é o objeto c que à chamou entendeu?
- para coferir se f é o target usa-se a funçào target(f)
- args(val) diz que os argumentos da função devem ficar em val
- void around(Point p, int val):
- call(void Point.set*(int)) && target (p) && args(val)
- {
- if(val >= 0 && val < 100)
- proceed(p, val);
- else
- proceed(p, 0);
- }
- // proceed continua a execução.
- // o args(x,y) pega os 2 primeiros argumentos da função.
- // no padrão voce pode fazer: if(x<0) || if(y<0)
Advertisement
Add Comment
Please, Sign In to add comment