Aşağıdaki pointcuts kullanarak yöntem giriş ve çıkış koşulları oturum için kurulmuş bir AspectJ iz rutini var:Anonim bir iç yöntemi bir noktadan nasıl hariç tutulur?
Benim SendEmail sınıftapublic aspect Trace {
pointcut anyMethodExecuted(): execution (* biz.ianw.lanchecker.*.*(..)) && !within(Trace) && !within(is(AnonymousType));
pointcut anyConstructorExecuted(): execution (biz.ianw.lanchecker.*.new(..)) && !within(Trace);
Bir LogOutputStream için hata ayıklama çıktısını yönlendirmek için setDebugOut yöntemini çağıran bir yöntemi var :
20:14:18.908 TRACE [biz.ianw.lanchecker.Trace] - Enters method: Logger biz.ianw.lanchecker.MailMail.access$0()
20:14:18.909 TRACE [biz.ianw.lanchecker.Trace] - Exits method: Logger biz.ianw.lanchecker.MailMail.access$0().
20:14:18.909 TRACE [biz.ianw.lanchecker.Trace] - with return value: Logger[biz.ianw.lanchecker.MailMail]
20:14:18.909 DEBUG [biz.ianw.lanchecker.MailMail] - DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
:
final private static Logger log = LoggerFactory.getLogger(MailMail.class);
...
LogOutputStream losStdOut = new LogOutputStream() {
@Override
protected void processLine(String line, int level) {
log.debug(line);
}
};
public void sendPlainHtmlMessage(...) {
Session session = javaMailSender.getSession();
PrintStream printStreamLOS = new PrintStream(losStdOut);
session.setDebugOut(printStreamLOS);
...
Bu İz sınıf pointcut çıktı olarak üreten, çağrıyı anonim iç sınıf yakaladığını dışında çalışıyor yukarıda gösterildiği gibi
Ben pointcut oldukça fazla geniş kapsamlı
&& !within(is(AnonymousType))
koşulu eklendi, ancak hiçbir etkisi olmadı. Aslında, herhangi bir yerde belgelenmiş (AnonymousType) bulmakta zorluk çekiyorum.
Bu anonim iç yöntemi dışlayan, tercihen başkalarını etkilemeden nasıl bir nokta kesiti yazabilirim? o log.debug sağlayan (- log MailMail özel olduğu için
erişim $ 0 yöntem MailMail eklendi:
Bu, ilgili bir sorun mu var? joinPoint.getStaticPart(). getSignature(). getDeclaringType(). isAnonymousClass() '' False' için döndürür ... ... $ 0() '. 'toLongString()' yöntem imzasını şu şekilde gösterir: 'execution (statik org.slf4j.Logger biz.ianw.lanchecker.MailMail.access $ 0())' – Ian