Java JSR-303-我的方法是线程安全的吗?

Java JSR-303-我的方法是线程安全的吗?,java,bean-validation,Java,Bean Validation,文档中说ValidatorFactory是线程安全的,但我担心使用注释服务“InvService”作为类属性,如下所示 我想知道这种方法是否是线程安全的?我基本上需要根据约束冲突进行数据库查找 public class MyValidator { @Autowired InvService invService; // ?????? private final ValidatorFactory factory;

文档中说ValidatorFactory是线程安全的,但我担心使用注释服务“InvService”作为类属性,如下所示

我想知道这种方法是否是线程安全的?我基本上需要根据约束冲突进行数据库查找

public class MyValidator {

    @Autowired
    InvService invService;                        //  ??????
    private final ValidatorFactory factory;


    public MyValidator() {
        factory = Validation.buildDefaultValidatorFactory();
    }


    public <T> void validate(final T instance) {
        final Validator validator = factory.getValidator();


        final Set<ConstraintViolation< T>> violations = validator.validate(instance, Default.class);

        if (!violations.isEmpty()) {
            final Set<ConstraintViolation<?>> constraints = new HashSet<ConstraintViolation<?>>(violations.size());

            for (final ConstraintViolation<?> violation : violations) {
                constraints.add(violation);
            }
            getDBRecords(constraints); 
            throw new ConstraintViolationException(constraints);
        }
    }

    private getDBRecords(Set<ConstraintViolation<?>> constraints) {
        invService.get(....);
    }
}
公共类MyValidator{
@自动连线
InvService InvService;/??????
私营工厂;
公共MyValidator(){
factory=Validation.buildDefaultValidatorFactory();
}
公共无效验证(最终T实例){
final Validator Validator=factory.getValidator();
最终设置>冲突=validator.validate(实例,Default.class);
如果(!inflictions.isEmpty()){
最终设置>(冲突.size());
对于(最终约束违反:违反){
限制。添加(违反);
}
getDBRecords(约束);
抛出新的ConstraintViolationException(约束);
}
}

私有getDBRecords(设置这取决于…InvService是线程安全的吗?如果是,那么您就可以了。线程安全类可以引用其他线程安全类的实例作为属性并保持线程安全。但是您必须确保您引用的对象是线程安全的。如果您没有开发该类,我希望看到明明白白地说它是线程安全的。

好了,现在你需要跟踪线索……InvDAO是线程安全的吗?
@Service
public class InvServiceImpl implements InvService {

    @Autowired
    private InvDAO InvDAO;
    private final Logger log = LoggerFactory.getLogger(this.getClass());


    @Override
    public <T extends InvContent>  getProduct(String InvKey) {
        return InvDAO.getInvContent(InvKey, TYPEPROD, Product.class);
    }
}