Comment AutoWire un objet sans Ressort XML fichier de contexte?

J'ai une Interface avec Component d'annotation et de certaines classes qui l'ont mis en œuvre comme suit:

@Component
public interface A {
}

public class B implements A {
}
public class C implements A {
}

Aussi, j'ai une classe avec un Autowired variable comme ceci:

public class Collector {
    @Autowired
    private Collection<A> objects;

    public Collection<A> getObjects() {
        return objects;
    }
}

Mon fichier de contexte se compose de ces définitions:

<context:component-scan base-package="org.iust.ce.me"></context:component-scan>

<bean id="objectCollector" class="org.iust.ce.me.Collector" autowire="byType"/>

<bean id="b" class="org.iust.ce.me.B"></bean>
<bean id="c" class="org.iust.ce.me.C"></bean>

Et dans la classe principale, j'ai quelques codes comme suit:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
B b = (B) context.getBean("b");
C c = (C) context.getBean("c");
Collector objectCollector = (Collector) context.getBean("objectCollector");

for (A object : objectCollector.getObjects()) {
    System.out.println(object);
}

De sortie:

org.iust.ce.me.B@1142196
org.iust.ce.me.C@a9255c

Ces codes fonctionnent bien, mais pour certaines raisons, je ne suis pas prêt à utiliser xml fichier de contexte. En dehors de cela, je préfère créer les objets avec le new opérateur plutôt que d'utiliser le getBean() méthode. Néanmoins, depuis la AutoWiring est vraiment une bonne idée dans la programmation, je ne veux pas le perdre.

Maintenant, j'ai deux questions!!

  1. comment puis-je AutoWire classes qui implémente l' A Interface sans utiliser le xml fichier de contexte?
    Est-il possible?
  2. lorsque je change la scope d'un haricot de la singlton à
    prototype comme suit:

    <bean id="b" class="org.iust.ce.me.B" scope="prototype"></bean>

    et d'instancier plusieurs haricots, seul le haricot qui a été instancié lors de la création de context, est injected en AutoWired variable. Pourquoi?

Toute aide sera appréciée.

OriginalL'auteur faghani | 2012-10-08