[RESOLVIDO] Carregar em um Bean do spring um map via XML sem ficar null

4 respostas
wescleyfcosta

Boa tarde,

Estou tentando carregar um Map em um bean do spring via XML, consegui que o bean fosse instânciado normal, bem como o propriedade Map que tem nele também, o problema é que os valores retornados desse mapa estão null, alguém saberia dizer o que faço de errado, abaixo parte da configuração do XML e a classe de testes que estou usando.

<bean id="entityDiscorevy" class="util.EntityDiscoveryImpl">
		<property name="entidades">
			<util:map map-class="java.util.HashMap">
				<entry key="PESSOAFISICA" value-ref="buscadorPessoaFisica" />
			</util:map>
		</property>
</bean>
public class EntityDiscoreryTest extends SpringTest {
	
	private EntityDiscovery entityDiscovery;
	
	@Override
	public void setUp() throws Exception {
		entityDiscovery = (EntityDiscovery) ctx.getBean("entityDiscovery");
		
	}
		
	@Test
	public void buscaEntidadesDeTiposDiferentesPorID(){
		Assert.assertNotNull(entityDiscovery.getEntidades());
		
	}
}

Observem que eu coloquei uma entrada no mapa, mesmo assim ele volta nulo, isso é, Assert da erro

4 Respostas

wescleyfcosta

esqueci de mencionar que coloquei um break no setEntidades(Map<String,Buscavel> entidades), e ele para normal lá, inclusive passando o valor correto para o Map, mas na hora do teste ele aparece que está null. Será que aquele atritubo scope que tem no Bean pode influenciar?

wescleyfcosta

poxa vida consegui fazer funcionar, precisei colocar um @Autowired na classe que tem o Mapa, no atributo, estava pensando que bastava colocar o Set para funcionar, deve ser alguma coisa de configuração do Spring que permite isso, mas ainda não domino.

wescleyfcosta

eu tirei o resolvido, apesar de ter colocado o autowired, e ter carregado o Map da classe, ele carrega com um valor de chave diferente do que eu defini no XML (fica o nome da classe como chave) e ainda usa o LinkedHashMap ou invés do HashMap que havia colocado.

wescleyfcosta

Vou voltar a marcar como resolvido, descobri que o bean era criado duas vezes, possivel pq uma a classe estava com o @Component e falei para o spring scannear o pacote onde ela estava e tb fiz a configuração via XML, até então imaginei ser obrigatório por causa do Mapa, logo ele chamava duas vezes o construtor (mas não o setter).

POr enquanto vou criar apenas via XML e tirei a Anotação componente. Mas será que o correto seria tirar a criação via XML e deixar apenas o Mapa lá (ou mesmo fazer isso via Anotação, não sei bem) e injetar via anotação.

Outra dúvida é. pelo fato de ser Singleton, mesmo usando duas maneiras diferentes de instânciar a classe, ele não deveria pegar a instância já criada?

Criado 23 de abril de 2012
Ultima resposta 23 de abr. de 2012
Respostas 4
Participantes 1