Vorrei creare metodo produttore di fagioli di una primavera che è consapevole che ha invocato, così ho iniziato con il seguente codice:Qual è l'equivalente DI di Spring di InjectionPoint di CDI?
@Configuration
public class LoggerProvider {
@Bean
@Scope("prototype")
public Logger produceLogger() {
// get known WHAT bean/component invoked this producer
Class<?> clazz = ...
return LoggerFactory.getLogger(clazz);
}
}
Come posso ottenere le informazioni che vuole ottenere il fagiolo iniettato?
Sto cercando un equivalente di CDI's InjectionPoint
nel mondo di primavera.
Grazie Ralph! Ok, quindi questo 'BeanPostProcessor' viene invocato ogni volta che un bean viene iniettato ovunque. C'è un modo in cui posso riconoscere ** quale ** bean deve essere iniettato? Voglio dire che ho ottenuto: 'postProcessBeforeInitialization (Object bean, String beanName)' dove 'bean' è un bean che vuole l'iniezione da realizzare (la ** parte ** che ho chiesto nella mia domanda), e' beanName 'è il nome' bean'. Ora non so quale campo nel 'bean' vuole che sia fatta l'iniezione - in altre parole non so se il bean iniettato è' LoggerProvider' o qualcos'altro. –
Per quanto ho capito, il post processore viene invocato dopo che un bean è stato creato! (non iniettato da nessuna parte). L'idea era di implementare il proprio framework di iniezione di piccole dimensioni sopra quel post processor di bean. – Ralph
Ok, quindi l'implementatore 'BeanPostProcessor' verrà chiamato ogni volta che viene creato un bean. Quindi, la tua idea era di implementare 'postProcessBeforeInitialization' e ad es. scansionare i campi che hanno la mia annotazione personalizzata (diciamo '@ Logger') e, attraverso la riflessione, inizializzare tale campo usando la mia logica personalizzata. Era questo il tuo approccio o l'ho complicato troppo? Grazie ancora! –