Pergunta

Estou ciente do fato de que a ordem de carregamento do bean é implicitamente determinada por dependências e dependências transitivas.

Imagine que você tem um conjunto de beans anotados que fornecem algum tipo de metadados que você deseja aplicar a outro conjunto de AwareBeans.Assim, somente depois de reunir todos os metadados dos N beans, somente depois disso você poderá pós-processar o AwareBeans.Você normalmente usa org.springframework.beans.factory.config.BeanPostProcessor para esse tipo de coisa.Como lidar com o pedido?Eu acho que mesmo configurando depends-on explicitamente não tem precedência sobre as dependências quanto à ordem de carregamento, certo?

Existe uma interface org.springframework.core.Ordered isso apenas determina a ordem dos beanPostProcessors que estão sendo aplicados, mas não a ordem dos beans.

eu poderia usar org.springframework.beans.factory.config.BeanFactoryPostProcessor mas a definição do bean não possui informações suficientes antes da instanciação do bean.Por exemplo beanDef.getBeanClass() retorna o nome da classe do bean etc.

Existe alguma outra maneira de você pensar em como fazer o que eu quero?

Foi útil?

Solução 2

Eu resolvi isso usando org.springframework.beans.factory.config.BeanFactoryPostProcessor e carregar classes pelo classloader para que eu possa usar o Reflection para obter as anotações.Eu acho que não deveria quebrar nada porque depois, quando o spring vai carregar a classe, o carregador de classe das classes de bean verifica se a classe já está carregada e, se estiver, não a carrega.Caso contrário, ele carrega.

Outras dicas

Você pode:

a) Injete todos os seus beans de metadados em seu BeanPostProcessor.

b) Faça com que seu pós-processador busque ativamente todos os beans de metadados do contexto do aplicativo na inicialização.

Cada forma tem prós e contras, mas o efeito é o mesmo:depois BeanPostProcessor pós-construção, cada bean de metadados também já será pós-construído.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top