Boa Tarde
Estava buscando informações sobre AOP pelo forum, encontrei o post nesse tópico do Mestre Urubatan mensionando o Spring.
Fiz algumas consutas e cheguei próximo ao objetivo.
Então fui testar o spring.
Fiz minha aplicação, 1, usando spring 2.5, hibernate, jpa, jsf e facelets, bunitinho MVC.
Fiz uma outra aplicação, 2, que depende de informações da aplicação 1. A aplicação 2 é orientada a agentes e fazendo toda análise de um determinado domínio. O aspecto no 1 faz com que a 2 perceba alterações na 1 e busque saber se trata da sua responsabilidade.
Bom ai configurei o spring da segunte forma:
No xml de fonfig do Spring: applicationContext.xml (no meu caso)
<!-- Interceptadores do aspecto -->
<bean id="interceptorBeansBefor" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>cidadeDAO</value> <!-- Nome da entidade que pretende que seja interceptada caso queira todos coloque * -->
</property>
<property name="interceptorNames">
<list>
<!--value>aspectBeforMetodo</value -->
<value>aspectAfterMetodo</value> <!-- No meu caso so precisava que fosse interceptado as alterações ao finalisar o metodo dos dois acrescente as duas classes. -->
</list>
</property>
</bean>
<!-- Classe de conselho essa classe que será executada -->
<bean id="aspectBeforMetodo" class="br.com.mder.controller.agente.aspectos.AspectBeforMetodo"/>
<bean id="aspectAfterMetodo" class="br.com.mder.controller.agente.aspectos.AspectAfterMetodo"/>
As classes que irão executar after ou o befor
Befor
package br.com.mder.controller.agente.aspectos;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
/**
* classe respnsável por interceptar requisições de alteração de base
* antes da chamada.
*
* @author Michel Valentin
*
*/
public class AspectBeforMetodo implements MethodBeforeAdvice {
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
}
}
After
package br.com.mder.controller.agente.aspectos;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
/**
* Classe que irá interceptar as requisicoes do user
* Responsável por informar ao agente que houve mudança no ambiente.
*
* @author Michel Valentin
*
*/
public class AspectAfterMetodo implements AfterReturningAdvice {
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println(arg0.getClass().getName() + " - " + arg1.getName());
}
}
“./IBusinessLogic/.foo: This expression selects join points on the foo() method on the IBusinessLogic interface only. This will only select join points on the IBusinessLogic interface if it is one of the beans to which the advisor has been attached.” (Russell Miles, 2004)
Té mais.
Para maiores detalhes consultar referência.
Referência:
http://static.springframework.org/spring/docs/2.0.x/reference/aop.html
http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html