Boa noite pessoal,
Estou tentando implementar o trabalho com AOP do Spring, mas o seguinte erro é exibido quanto tento executar a aplicação:
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" java.lang.ClassCastException: $Proxy0 cannot be cast to br.com.springidol.bean.Usuario at br.com.springidol.app.UsuarioApp.main(UsuarioApp.java:20)
O xml com as declarações do Spring é o seguinte:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="tipo" class="br.com.springidol.bean.Tipo" scope="prototype">
<constructor-arg value="Cliente" />
</bean>
<bean id="usuarioTarget" class="br.com.springidol.bean.Usuario"
autowire="byName" scope="prototype">
<property name="nome" value="Wagner" />
</bean>
<bean id="audita" class="br.com.springidol.bean.Audita" />
<bean id="auditadvice" class="br.com.springidol.bean.AuditaAdvice">
<property name="audita" ref="audita" />
</bean>
<bean id="auditaAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="auditadvice" />
<property name="pattern" value=".*exibeNome" />
</bean>
<bean id="usuario" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="usuarioTarget" />
<property name="interceptorNames" value="auditaAdvisor" />
<property name="proxyInterfaces" value="br.com.springidol.bean.exibicao" />
</bean>
</beans>
A classe que executa a aplicação:
package br.com.springidol.app;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import br.com.springidol.bean.Usuario;
public class UsuarioApp {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-servlet.xml");
Usuario u = (Usuario) ctx.getBean("usuario");
u.exibeNome();
}
}
A classe com a declaração dos métodos para execução aos métodos definidos como joinpoints é seguinte:
package br.com.springidol.bean;
public class Audita {
public Audita() {
}
public void PrimeiroPonto() {
System.out.println("Executado Primeiro Ponto...");
}
public void SegundoPonto() {
System.out.println("Executado Segundo Ponto...");
}
public void TerceiroPonto() {
System.out.println("Executado Terceiro Ponto...");
}
}
A classe usuário:
package br.com.springidol.bean;
public class Usuario implements exibicao{
private String nome;
private Tipo tipo;
public Usuario() {
}
public Usuario(String nome, Tipo tipo) {
this.nome = nome;
this.setTipo(tipo);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setTipo(Tipo tipo) {
this.tipo = tipo;
}
public Tipo getTipo() {
return tipo;
}
public void inicializa() {
System.out.println("Inicializado");
}
public void termina() {
System.out.println("Terminado");
}
public void exibeNome(){
System.out.println( this.nome);
}
}
Não entendo porque é apresentado esse erro.
Alguém poderia me orientar?
Obrigado