2010-11-25 37 views
0

ont deux définitions de haricots:Spring: définir la propriété du bean (ref à d'autres haricots) comme option

fichier a.xml

<bean id="A" class="com.A"> 
<property name="bClass" ref="B"/> 
</bean> 
fichier

b.xml

<bean id="B" class="com.B"/> 

Dans certains cas, Le fichier b.xml ne contient pas la définition du bean B.
Et de l'autre côté, le fichier a.xml contient toujours le lien vers la définition B.

Comment définir référence aux haricots B être en option, afin d'éviter org.springframework.beans.factory.NoSuchBeanDefinitionException

Répondre

0

@Autowired (obligatoire = false) a aidé

+0

comment venir? Vous n'utilisez pas @ autowired dans votre configuration. Comment l'annotation s'applique-t-elle alors? –

2

Vous ne pouvez pas. Si vous avez une référence à B, alors B doit exister. Vous devez vous assurer qu'il existe une sorte de talon B, dont la définition serait remplacée par la définition de B dans b.xml.

Sinon, ne pas injecter B dans A, mais faire A regarder en utilisant BBeanFactory.getBean("B") et gérer l'absence potentielle de B programme.

1

Encore une autre possibilité (en plus de celles suggérées par skaffman) est d'inverser la dépen- dance. Laissez le haricot B connaître le haricot A. Il peut même s'inscrire en son sein - qui est, appeler le poseur, .: par exemple

public class B { 
    private A a; 

    public void init() { 
    a.setB(this); 
    } 
}