为什么constraintValidatorContext中的构造函数initialize()仅在第一次运行?

时间:2014-01-27 16:21:44

标签: java java-ee ejb ejb-3.0 ejb-3.1

我遇到问题,因为自定义ConstraintValidatorContext initialize()仅在调用此自定义注入时首次调用,之后它再次运行方法isValid only()而不再使用构造initialize()方法每次 ! 。

示例@APIAuth注释:

@Documented
@Constraint(validatedBy = APIAuthValidator.class)
@Target({ElementType.CONSTRUCTOR,ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface APIAuth {
    String message() default "";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

APIAuthValidator.class

public class APIAuthValidator implements ConstraintValidator<APIAuth, String>{

    @Override
    public void initialize(APIAuth constraintAnnotation) {
        System.out.println("echo first time only");             
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {

        return true;
    }
}

在Restful Stateless Session bean中使用的示例

@Stateless
@Path("Accepted")
public class AcceptedAPI {

    @Context
    private UriInfo context;
    @Context
    private HttpServletRequest client;
    @PersistenceContext (unitName="APIPU") EntityManager EM;

    @GET
    @APIAuth
    @Produces(MediaType.TEXT_PLAIN)
    public String getIps() {
        return "Test";
    }
}

所以当我请求无状态时,它首次在控制台echo first time only上回显,当我再次请求无状态时,它不会再回显任何事情!

所以我认为我的自定义Validator注入是在它第一次在java环境中调用时被初始化和缓存的,

那么我每次打电话时如何使我的自定义注入强制initialize

谢谢,

0 个答案:

没有答案