Boa noite pessoal,
Estou tentando implementar o trabalho com AOP do Spring, mas o seguinte erro é exibido quanto tento executar a aplicação:
[quote]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)[/quote]
O xml com as declarações do Spring é o seguinte:
[code]<?xml version="1.0" encoding="UTF-8"?>
<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>
[/code]
A classe que executa a aplicação:
[code]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();
}
}
[/code]
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