Spring 2.0 @AspectJ support
Não é de hoje que o Spring framework já está consagrado no mercado, mas não poderia ser diferente o framework é muito completo e flexível. Com o Spring Framework 2.0 podemos usar AOP(no spring 2.0 é aspectJ) com apenas uso de annotations.
Vejam o exemplo:
no xml do Spring
** Para o AOP funcionar a classe deve estar anotada com @Aspect e essa classe tem que estar obrigatoriamente definida como um bean do Spring. Com as annotations @Before e @After podemos definir que ele irá executar antes(@Before) e depois(@After). Com o point-cut "execution(* org.diegopacheco.springaop.model.service.IPessoaService.*(..))" estou dizendo para o Spring: Intercepte todas as invocações a qualquer classe que implemente a interface:
org.diegopacheco.springaop.model.service.IPessoaService não interesando os parametros ou qual metodo da interface. Quando o Spring 'bate' esse point-cut ele chama a execução do metodo anotado. Esse mecanismo já existia antes porem era todo definido por XML e agora tem suporte a annotatiins. Para maiores informações e acesso a mais recursos das annotations de aspectos do Spring vejam: spring ref aop.
Eras isso, rotundos.
Vejam o exemplo:
package org.diegopacheco.springaop.aop;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class SystemAop {
private final Log log = LogFactory.getLog(getClass());
@Before("execution(* org.diegopacheco.springaop.model.service.IPessoaService.*(..))")
public void initService(){
log.info("Iniciando a execução do Service ");
}
@Before("execution(* org.diegopacheco.springaop.model.dao.IPessoaDao.*(..))")
public void initDao(){
log.info("Iniciando a execução do Dao ");
}
@After("execution(* org.diegopacheco.springaop.model.service.IPessoaService.*(..))")
public void finishService(){
log.info("Finalizado a execução do Service ");
}
@After("execution(* org.diegopacheco.springaop.model.dao.IPessoaDao.*(..))")
public void finishDao(){
log.info("Finalizado a execução do Dao ");
}
}
no xml do Spring
...
<!-- Para abilitar o uso de @Aspect -->
<aop:aspectj-autoproxy/>
<bean
id="systemAop"
class="org.diegopacheco.springaop.aop.SystemAop"
/>
** Para o AOP funcionar a classe deve estar anotada com @Aspect e essa classe tem que estar obrigatoriamente definida como um bean do Spring. Com as annotations @Before e @After podemos definir que ele irá executar antes(@Before) e depois(@After). Com o point-cut "execution(* org.diegopacheco.springaop.model.service.IPessoaService.*(..))" estou dizendo para o Spring: Intercepte todas as invocações a qualquer classe que implemente a interface:
org.diegopacheco.springaop.model.service.IPessoaService não interesando os parametros ou qual metodo da interface. Quando o Spring 'bate' esse point-cut ele chama a execução do metodo anotado. Esse mecanismo já existia antes porem era todo definido por XML e agora tem suporte a annotatiins. Para maiores informações e acesso a mais recursos das annotations de aspectos do Spring vejam: spring ref aop.
Eras isso, rotundos.