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

时间:2012-10-23 13:14:41

标签: java bean-validation

文档说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(....);
    }
}

这就是服务类的样子:

@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);
    }
}

1 个答案:

答案 0 :(得分:0)

那取决于...是InvService线程安全吗?如果是,那么你没事。线程安全类可以将其他线程安全类的实例作为属性引用,并且本身保持线程安全。但是你必须确保你引用的对象是线程安全的。如果您没有开发该类,我希望看到明确说明它是线程安全的文档。