Dá para carregar o valor de uma annotation de arquivo de propriedade?
5 respostas
thimor
Ola,
Preciso definir qual objeto sera injetado pelo spring a partir de um arquivo de propriedade. Tem como? Há outra forma de fazer?
@Named(value="categoriaDaoB1")publicclassCategoriaDaoB1implementsCategoriaDao{...}@Named(value="categoriaDaoB2")publicclassCategoriaDaoB2implementsCategoriaDao{...}@ManagedBean@RequestScopedpublicclassCategoriaController{@Resource(name="pegar este valor no arquivo de propriedade")privateCategoriaDaodao;...}
A principio nao sei qual base de dados será utilizada. Entao eu preciso definir no arquivo de propriedades se B1 ou B2, para o Dao correto ser injetado. Tentei com ResourceBundle, mas nao deu certo.
Pode ser que tenha outra forma, mas nao sei.
99% de chance de não ser possível, na minha opinião.
Mas, explica melhor, você vai ter 2 dao’s tipo UserDaoUm e UserDaoDois?
Alexandre_Saudate
Com um pouco de criatividade, talvez dê. Mas acho que isso vai te dar um certo trabalho, porque as anotações só aceitam constantes. Por exemplo, isso compila:
Enfim, talvez você até consiga. Mas vai ter “bad smells” no seu código =/
[]s
thimor
romarcio:
99% de chance de não ser possível, na minha opinião.
Mas, explica melhor, você vai ter 2 dao’s tipo UserDaoUm e UserDaoDois?
Eu tenho duas implementacoes do DAO para utilizar diferentes bases de dados onde as tabelas e atributos tem nomes diferentes. A aplicacao ja esta configurada para usar as duas bases de dados e as classes ja estao mapeadas para os dois bancos. Isto ja funciona. So que na hora de injetar o dao eu tenho que definir o @Resource com o nome do dao que vou injetar. Eu quero deixar o nome do banco num properties. Para na hora de rodar a aplicacao o arquivo ser lido e a injecao ser a que vou precisar. Se nao for assim teria que fazer uma POG na minha opiniao.
Se estiver usando Spring, dê uma olhada no conceito de Environments dele. De qualquer forma, existem N maneiras mais elegantes de fazer o que você quer.