| Hello Yoann, Thanks for this quick reply you are absolutely right, calling applicationContext.getBean(...) from the set method creates the lock ! The issue is the FieldBridge is not a SpringComponent that's why I had to use this applicationContext.getBean(..) You solution is working, and I have found another one using a AutowireCapableBeanFactory:
@Component
class MessageFieldBridge extends MetadataProvidingFieldBridge {
@Autowired
var translationService: MySpringService = _
var initialized = false
def initBean() = {
if(!initialized) {
SpringContextBridge.get().autowireBean(this)
initialized = true
}
}
override def set(name: String, value: scala.Any, document: Document, luceneOptions: LuceneOptions): Unit = {
initBean()
}
override def configureFieldMetadata(name: String, builder: FieldMetadataBuilder): Unit = {
initBean()
}
}
And the Spring Bridge:
trait SpringContextBridge {
def autowireBean(bean: AnyRef)
}
@Service
class SpringContextBridgeImpl extends SpringContextBridge with ApplicationContextAware {
@Autowired
var autowireBeanFactory: AutowireCapableBeanFactory = _
override def autowireBean(bean: AnyRef) = {
autowireBeanFactory.autowireBean(bean)
}
override def setApplicationContext(applicationContext: ApplicationContext): Unit = {
SpringContextBridgeImpl.applicationContext = applicationContext
}
}
object SpringContextBridgeImpl {
private var applicationContext: ApplicationContext = _
def get(): SpringContextBridgedServices = applicationContext.getBean(classOf[SpringContextBridgedServices])
}
|