2010-11-30 21 views
9

Setter yöntemlerinin bağımsız değişkenlerini denetleyen ve boş değerlerin boş değerlerle üzerine yazdığı bir özellik geliştiriyorum. Bu şimdiye kadar benim durumdur: Maalesef yazma deyimi args[i] = null; şimdi çalışırAspectj bir yöntemin üzerine yazılır

@Before("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)") 
public void check(final JoinPoint jp) { 
    LOGGER.debug(jp.getSignature().toLongString()); 
    Object[] args = jp.getArgs(); 
    for (int i = 0; i < args.length; i++) { 
     if (args[i] instanceof String && ((String) args[i]).isEmpty()) { 
      args[i] = null; 
     } 
    } 
}

! Bunu nasıl yazmalıyım bilen var mı?

Alkış,

Kevin

+0

@Kevin btw bunu değiştirebilir, eğer (args [i] instanceof String && ((String) args [i]). IsEmpty()) 'ile bu' if ("". Eşittir (args [i]))) –

+0

Teşekkürler, daha hızlı mı? Döküm nedeniyle olabilir mi? – eglobetrotter

+0

Performans açısından çok fazla bir şey olduğunu düşünmüyorum, ancak sürümüm daha okunabilir ve dolayısıyla daha az hataya yatkın –

cevap

-3

kesinlikle doğru olması @Ralph, fark bir çevrede tavsiye ile ben excecution için args geçmek mümkün olmam! Bu şimdi iyi çalışıyor!

@Around("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)") 
public void checkAroundSetter(final ProceedingJoinPoint pjp) 
    throws Throwable { 
    LOGGER.debug(pjp.getSignature().toLongString()); 
    Object[] args = pjp.getArgs(); 
    for (int i = 0; i < args.length; i++) { 
     if (args[i] instanceof String && ((String) args[i]).isEmpty()) { 
      args[i] = null; 
     } 
    } 
    pjp.proceed(args); 
} 

Hey insanlar performans hakkında ne düşünüyorsunuz?

+4

Bu bir cevap değil. Eğer Ralph'in cevabına cevap vermek istiyorsanız, yorum ekleyin, ek bilgi eklemek isterseniz, sorunuzu düzenleyin. Bu cevabı silmelisiniz. –

+0

Ancak konuyla ilgili başka bir sorum var. – eglobetrotter

+0

sonra yeni bir soru gönderin. SO soruları bir ipucu için bir kez –

28

Sana tavsiye önce yerine ait bir çevrede tavsiye uygulamak zorunda inanıyoruz.

Eğer yeni argümanlar devam kullanabildiği için:

proceed(newArgs); 
+0

Teşekkürler, neden daha önce yerine bir tavsiyede bulunmak zorundayım? Farklı bir tavsiyeyle, bir yöntemin yürütülmesini kontrol edebileceğim, İstisnaları yakalayabildiğim ve iade değerini kontrol edebileceğim arasındaki fark nedir? – eglobetrotter

+7

A, öneri dizisinin bir kopyasının alınmasından önce, ancak orijinal argümanları değiştiremez. Etrafındaki tavsiyeler budur. Ralph: +1 –