package com.ulisesbocchio.jasyptspringboot.resolver; import com.ulisesbocchio.jasyptspringboot.EncryptablePropertyDetector; import com.ulisesbocchio.jasyptspringboot.EncryptablePropertyResolver; import com.ulisesbocchio.jasyptspringboot.util.Singleton; import org.jasypt.encryption.StringEncryptor; import org.springframework.beans.factory.BeanFactory; import org.springframework.core.env.Environment; /** * @author Ulises Bocchio */ public class DefaultLazyPropertyResolver implements EncryptablePropertyResolver { private Singleton<EncryptablePropertyResolver> singleton; public DefaultLazyPropertyResolver(String encryptorBeanName, String detectorBeanName, BeanFactory beanFactory, Environment environment) { singleton = new Singleton<>(() -> { StringEncryptor encryptor = beanFactory.getBean(environment.resolveRequiredPlaceholders(encryptorBeanName), StringEncryptor.class); EncryptablePropertyDetector detector = beanFactory.getBean(environment.resolveRequiredPlaceholders(detectorBeanName), EncryptablePropertyDetector.class); return new DefaultPropertyResolver(encryptor, detector); }); } @Override public String resolvePropertyValue(String value) { return singleton.get().resolvePropertyValue(value); } }