Je développe un aspect qui vérifie les arguments de chaîne des méthodes setter de mon paquet d'entité pour les chaînes vides et les remplace par des valeurs null
. Mais malheureusement, mon aspect ne fonctionne pas bien :(Je suppose qu'il est à cause de ma définition de pointcut, mais je ne suis pas sûrDéfinition de point de coupure AOP pour l'éditeur de chaînes
Mon aspect ressemble à:..
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class EmptyStringToNullSetter {
private static final Logger LOGGER = LoggerFactory
.getLogger(EmptyStringToNullSetter.class);
public void check(final JoinPoint jp) {
LOGGER.debug(jp.getSignature().toLongString());
}
}
Ma config de printemps ressemble :
<bean id="emptyStringToNullSetter" class="de.foo.util.aop.parameter.EmptyStringToNullSetter" />
<aop:config>
<aop:pointcut id="entityStringSetter" expression="execution(* de.foo.entity.*.set*(..)) and args(java.lang.String)" />
<aop:aspect id="checkEmptyStringsAspect" ref="emptyStringToNullSetter">
<aop:before method="check" pointcut-ref="entityStringSetter" />
</aop:aspect>
</aop:config>
ma classe de test ressemble:
import de.foo.entity.Period;
@ContextConfiguration(locations = { "/spring/test-util-context.xml" })
public class EmptyStringToNullSetterTest extends
AbstractJUnit4SpringContextTests {
@Test
public void testCheck() {
Period period = new Period();
period.setName("");
Assert.assertNull(period.getName());
}
}
Lorsque j'exécute mon test l'aspect ne signifie en tercept mon setter. Est-ce que quelqu'un a une idée de pourquoi?!
Cheers,
Kevin
oui merci, vous avez raison avec procuration base aop, mais je pensais que le printemps fait cela aussi avec des haricots non printemps. De toute façon je vais passer au tissage d'aspectj. Mais pourquoi devrais-je utiliser un conseil autour au lieu d'avant? – eglobetrotter
Un conseil avant ajoutera une logique supplémentaire avant le point de jointure conseillé, mais continuera avec le même contexte (c'est-à-dire l'argument original de la méthode conseillée). Avec un conseil autour, vous pouvez appeler proceed() avec un contexte altéré (dans votre cas, null au lieu d'une chaîne vide). – ramnivas