次の階層があります。
@Validated
public class BaseResource
と
public class DeviceResource extends BaseResource
注釈は次の@Validated
とおりです。
package com.redbend.validation.annotation;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.inject.Scope;
@Scope
@Target(TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Validated {
}
そして、次のアドバイスを含む春の側面があります。
package com.redbend.validation.aspect;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
import javax.validation.constraints.NotNull;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import com.redbend.exceptions.EExceptionMsgID;
import com.redbend.exceptions.runtime.MissingMandatoryParameterException;
import com.redbend.validation.annotation.MandatoryOneOfParams;
import com.redbend.validation.annotation.MandatoryParams;
import com.redbend.validation.annotation.NotEmpty;
import com.redbend.validation.annotation.OneOfParamsForValue;
import com.redbend.validation.annotation.OneOfParamsForValueMap;
import com.redbend.validation.annotation.ParamsForValue;
import com.redbend.validation.annotation.ParamsForValueMap;
@Aspect
@Component
@Order(2)
public class ValidationInterceptor {
private static Logger logger = LoggerFactory.getLogger(ValidationInterceptor.class);
public ValidationInterceptor() {
// TODO Auto-generated constructor stub
}
@Before("within(com.redbend..*) && @within(com.redbend.validation.annotation.Validated) ")
public void validate(JoinPoint joinPoint) throws Exception {
validateParams(joinPoint);
}
でメソッドを呼び出すと、でアノテーションが付けDeviceResource
られているものから継承しているとはいえ、 でアノテーションが付けられているとはいえ、アスペクトに引っかかりBaseResource
ません。
注釈を付けると、正常に機能します。で注釈を付けずに、アスペクトがメソッドをインターセプトするようにするにはどうすればよいですか?@Validated
@Validated
@Inherited
DeviceResource
@Validated
DeviceResource
@Validated
ありがとう、
アミール