2012-05-03 2 views
1

Pas sûr que ce soit un ressort lié ou non:Comment ressort instancier cette classe et sa dépendance

J'ai une classe de haricots comme celui-ci

class BeanClass { 
    private ServiceA serviceA; 
    private ServiceB serviceB; 

    public BeanClass() {} 

    public void setServiceA(ServiceA serviceA) { 
     this.serviceA = serviceA; 
    } 

    public void setServiceB(ServiceB serviceB) { 
     this.serviceB = serviceB; 
    } 

    public void callService() { 
     serviceA.a(); 
     serviceB.b(); 
    } 
} 

et sa configuration:

<bean id="beanClass" class="BeanClass"> 
    <property name="serviceA" ref="serviceA"/> 
    <property name="serviceB" ref="serviceB"/> 
</bean> 

mais j'instancie le bean avec un nouveau mot-clé dans une classe de contrôleur:

class ControllerClass { 
    public void someMethod() { 
     BeanClass beanClass = new BeanClass(); 
     beanClass.callService(); 
    } 
} 

mon problème est comment ServiceA et ServiceB sont instanciés correctement? puisque j'utilise new pour obtenir un objet de classe, et ne jamais définir son membre de champ.

Répondre

1

Vous ne voulez pas faire:

BeanClass beanClass = new BeanClass(); 

Ce en un mot est le point de l'ensemble du conteneur du CIO de printemps. Vous devez laisser le conteneur du CIO vous donner une référence à votre BeanClass

@Autowired 
BeanClass myBeanClass; 

* Ce n'est pas tout à fait complète que vous aurez besoin d'un peu de câblage supplémentaire pour votre contrôleur.

+0

Merci! Je sais que ce n'est pas une bonne pratique. Je veux juste m'assurer que Spring instancie son membre sur le terrain? par exemple. ServiceA, ServiceB. –

+0

Il créera des instances pour les 2 propriétés que vous avez définies, puis vous appellera setters. – rooftop

+0

merci! Vous voulez dire que Spring utilisera la définition du bean pour instancier BeanClass quand il verra le nouveau BeanClass(), même si je l'appelle à partir d'une méthode normale et l'assigner à une variable locale. –

Questions connexes