Standard du printemps Bean Injection vs permettra à l'autowiring
Autant je comprends Lors de l'Utilisation de l'Injection de Dépendance tous les haricots sont en cours d'initialisation au Démarrage.
<bean id="userPreferences" class="com.foo.UserPreferences">
</bean>
<!-- a singleton-scoped bean injected to the above bean -->
<bean id="userService" class="com.foo.SimpleUserService">
<!-- a reference to the userPreferences bean -->
<property name="userPreferences" ref="userPreferences"/>
</bean>
et la configuration ci-dessus signifie que userService et userPreferences créé lorsque l'application démarre. Est-il correct?
Lors de l'utilisation de permettra à l'autowiring et à l'aide de <context:component-scan>
public class SimpleUserService{
@Autowired
UserPreferences userPreferences;
//omitted
}
1) Est userPreference créé sur Demande init?
2) Quelle est l'étendue par défaut pour bean injecté par autowire et comment pouvons-nous changer?
3) Comment affecte bean création et de haricots injection?
Espère que je me suis fait clair.
OriginalL'auteur danny.lesnik | 2011-05-04
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez ajouter
@Service
ou@Component
à laSimpleUserService
classe.Peut-être que vous devriez passer un peu de temps dans la compréhension du Printemps du cycle de vie. Vous devez comprendre que le Ressort fonctionne un peu de cette manière (pas 100% correct):
Mais il ne fonctionne PAS de cette façon: prendre une classe, regardez ce que les références elle doit la création de cette des références (récursif), puis la création de la classe.
Si vous comprenez cela, alors vous comprendrez aussi, que le @la Portée d'un bean est défini à la fève de déclaration de classe, mais pas sur les références.
OriginalL'auteur Ralph
Dans les deux cas userPreferences est initialisé lorsque le Printemps Contexte est chargé. Vous pouvez modifier ce comportement en ajoutant
lazy-init="true"
à la fève de configuration.La portée de ce qui est injecté tous les haricots chargé dans le Printemps. Si vous importez un fichier XML de configuration à partir d'un autre projet, il serait aussi inclus. Je ne suis pas sûr si vous pouvez limiter votre portée.
S'est autocâblés, ou configuré via XML, le comportement doit être le même. Je préfère en définissant explicitement les dépendances automatique des annotations. Puis, de nouveau, j'aime aussi les langages fortement typés.
OriginalL'auteur JustinKSU
Oui
Oui
L'étendue par défaut est toujours "singleton". Ce peut être changé à l'aide de
@Scope
avec@Bean
ou lascope
attribut XML sur<bean>
.Ce n'est pas une question claire. Si vous modifiez le haricot portée, vous changer quand il est créé (début de l'application, à chaque demande, à chaque session, etc). Le câblage, la configuration reste la même, seuls les changements de cycle de vie.
OriginalL'auteur skaffman
L' @autocâblés notation est obsolète façon de dire @inject. Ce dernier est une fonction de JavaEE 6.
stackoverflow.com/questions/7142622/what-is-the-difference-between-inject-and-autowired-in-spring-framework-which
OriginalL'auteur Stepan