हमें हमारे वसंत आधारित परियोजना में एक ही समस्या का सामना करना पड़ा। इसे सबसे अच्छे वसंत तरीके से हल करने के लिए हम ConstraintValidator इंटरफ़ेस और कार्यान्वयन को विभाजित करते हैं।
public interface UniqueValidator extends ConstraintValidator<Unique, String> {
}
सेवा परत में हम कि इंटरफ़ेस को लागू:
public class UniqueValidatorJpaImpl implements UniqueValidator {
private EntityManager entityManager;
...
}
अगला हम UniqueValidatorJpaImpl के लिए स्प्रिंग संदर्भ में एक सेम की घोषणा डोमेन परत में उदाहरण के लिए हम केवल इंटरफ़ेस होता है।
आखिरकार उन सभी कर्मचारियों को काम करने के लिए हमने स्प्रिंगकोनस्ट्रेनट वैलिडेटेटर फैक्ट्री बढ़ा दी। डिफ़ॉल्ट रूप से यह केवल मान्य में निर्दिष्ट वर्ग का एक नया उदाहरण बनाता है।
public class SpringConstraintValidatorFactoryEx implements ConstraintValidatorFactory {
private final Logger logger = LoggerFactory.getLogger(SpringConstraintValidatorFactoryEx.class);
@Autowired
private AutowireCapableBeanFactory beanFactory;
public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
T bean = null;
try {
logger.info("Trying to find a validator bean of class " + key.getSimpleName());
bean = this.beanFactory.getBean(key);
} catch (BeansException exc) {
logger.info("Failed to find a bean of class " + key.getSimpleName());
}
if (bean == null) {
try {
logger.info("Creating a new validator bean of class " + key.getSimpleName());
bean = this.beanFactory.createBean(key);
} catch (BeansException exc) {
logger.info("Failed to create a validator of class " + key.getSimpleName());
}
}
if (bean == null) {
logger.warn("Failed to get validator of class " + key.getSimpleName());
}
return bean;
}
}
आप programers.se की कोशिश की है: हम पहले इसी प्रकार की एक सेम के लिए वसंत संदर्भ में देख कर इसे बढ़ाया? – Pureferret