ich versuche, eine pointcut zu machen, die SQL-Abfragen
@Before("execution(* org.springframework.jdbc.core.JdbcTemplate.*(String, ..))")
public void logSQLQueries() {
System.out.println("@@");
}
Ich versuche einzuloggen, wie hier den Code zu implementieren; http://www.gotoquiz.com/web-coding/programming/java-programming/log-sql-statements-with-parameter-values-filled-in-spring-jdbc/
aber ich bekomme
java.lang.IllegalArgumentException: Can not set org.springframework.jdbc.core.JdbcTemplate field com.xyz.abc.dao.ABCDaoImpl.jdbcTemplate to com.sun.proxy.$Proxy53
ich die jdbcTemplate Bohne in meinem * -servlet.xml erstellt haben und autowired dies in allen meinen DAOs. Funktioniert einwandfrei, aber das Hinzufügen des Pointcuts gibt die Ausnahme. Irgendwelche Ideen ??
Programm statt konkreten Klassen Schnittstellen. Spring verwendet Proxys, um AOP anzuwenden. Anstelle von 'JdbcTemplate' verwenden Sie' JdbcOperations', letzteres ist die Schnittstelle (die Sie wahrscheinlich auch in Ihrem Ointcut verwenden möchten).Oder wechseln Sie von schnittstellenbasierten Proxys zu klassenbasierten Proxys oder verwenden Sie keine Proxies, sondern verwenden Sie das Loadtime Weben, um Aspekte anzuwenden. –
Das Beispiel, auf das Sie zeigen, macht sogar, was @M.Deinum Ihnen gerade gesagt hat, Sie haben es geändert! BTW, Spring AOP funktioniert auch mit Klassen anstelle der bevorzugten Schnittstellen, aber dann benötigen Sie CGLIB auf Ihrem Klassenpfad. – kriegaex
Ich habe zuerst mit der Schnittstelle versucht, aber als es nicht funktionierte, versuchte ich etwas anderes. Ich verstehe das Konzept der Proxies hier nicht. Können Sie mir bitte einen Hinweis geben, wo ich das Konzept verstehen kann? Außerdem, wie wechsle ich zu klassenbasiertem Proxy oder benutze Ladezeitweben. Danke für die Antwort, bitte eine Antwort, damit ich sie markieren kann. – SKaul