Pergunta

Na primavera, foi possível instanciar qualquer classe definindo o feijão correspondente em XML Conf. Também foi possível instanciar mais de um feijão para a mesma classe com parâmetros diferentes .....

Também são esses recursos no CDI, a saber, é possível criar diferentes instâncias da mesma classe com diferentes parâmetros de inicialização?

Também é possível criar um feijão sem alterar a classe ... quero dizer, sem adicionar anotação?

ADICIONADO

Deixe -me fazer um exemplo.

<bean id="someBean1" class="org.mm.MyBean">
    <property name="x" value="xx"/>
    <property name="y" value="yy"/>
    <property name="z" value="zz"/>       
</bean>
<bean id="someBean2" class="org.mm.MyBean">
    <property name="x" value="other value"/>
    <property name="y" value="yy2"/>
    <property name="z" value="zz2"/>       
</bean>

Como pode instanciar duas instâncias da mesma classe e inicializá -las com diferentes valores de campo?

Foi útil?

Solução

Duas opções, tanto quanto posso ver:

  • Sem mais conhecimento da sua USECASE, presumo que você deseja fornecer alguma implementação alternativa para problemas de teste ou configuração (sim (digamos, outro fornecedor de pagamento para um serviço de ordem). Isso é apoiado pela própria especificação, dê uma olhada em @Alternative aqui (e não repita meu erro inicial e esqueça de ativar alternativas no beans.xml)

  • Para obter uma configuração XML em estilo de primavera, você pode usar Costura 3 configuração, que fornece configuração XML exatamente como descrito. BTW, isso fez parte do JSR 299, mas foi removido da especificação por qualquer motivo.

Outras dicas

Existem algumas maneiras de fazer isso.

Por exemplo, use @new

Private @inject @new yourbean yb; Private @Inject @New YourBean YB2;

Isso força o contêiner a criar uma nova instância, independentemente do escopo que o Bean originalmente possuía.

Outra maneira seria simplesmente definir o seu benefício como @dependente de escopo (que é btw (atualmente) o padrão se uma classe não for anotada).

Você pode usar facilmente os métodos do produtor e se tiver várias instâncias que devem ser produzidas por um método, use os qualificadores de CDI para distinguir diferentes tipos de instâncias.

Além disso, você pode usar o Seam Config para fazer isso na primavera, mas acho que os métodos do produtor são uma maneira mais elegante de fazer isso. Dependendo do seu caso de uso, há outra opção que é @Alternative.

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