Yes, the before advice works fine, except one small thing:
it is invoked when the DAO method is called from any of controllers A and B, which is wrong - I need to have only the Before advice to be invoked when the DAO method is called from the controller A, and After advice only has to be called when the DAO method is called from the controller B.
I tried to gain this goal with adding "within" clause to the pointcut expression - but no luck. I specified the Before advice needs to be invoked when the adviced method from DAO is called from the controller A - and this doesn't work. The advice is never called - so pointcut is never matched. An unfortunately I don't have any idea of how to debug the Spring AOP pointcut matchers 
I've noticed the method in the controller A, which used to invoke the service method of the DAO, looks like this:
Code:
/**
* @see org.springframework.web.servlet.mvc.AbstractFormController#formBackingObject(javax.servlet.http.HttpServletRequest)
*/
@Override
protected Object formBackingObject(final HttpServletRequest request)
throws Exception {
final String faceId = ServletRequestUtils.getStringParameter(request,
"face");
// TODO check if the customer wants to load it's own
if (faceId != null) {
return simpleFaceDao
.loadSimpleFace(new UniqueEntityInterface<UUID>() {
@Override
public UUID getUuid() {
return UUID.fromString(faceId);
}
});
}
return new SimpleFace();
}
May it happen the "protected" modifier of the method formBackingObject violates the matching of the "within" expression?