@PostConstruct d'annotation et de printemps cycle de vie
Je suis nouveau sur le Printemps, je voudrais savoir:
J'ai une classe java annoté avec @Composant (le printemps) et à l'intérieur j'ai une méthode annotée avec @PostConstruct. La classe est ensuite référencé par @Autocâblés annoté champ dans une autre classe. Puis-je supposer que la classe n'est injecté après @PostConstruct est appelé?
@Component
class AuthenticationMetrics {
private static final MetricRegistry metrics = new MetricRegistry();
final Counter requestsTotal
final Meter guestLogins
final Meter kfUserLogins
final Timer guestLoginResponseTime
final Timer kfLoginResponseTime
@PostConstruct
public void populateMetricsRegistry() {
metrics.counter("authentication.requests.totals")
}
}
Oui, vous pouvez supposer qu'il... le Printemps crée d'abord la fève, puis vérifie l'éventuelle @PostConstruct annotation et enfin injecte le haricot. Je vois, en tout cas, que vous n'utilisez pas de printemps de l'objet dans le populateMetricsRegistry méthode. Dans ce cas, pour cet objet (paramètres de l'objet), il est de votre responsabilité de gérer le cycle de vie correcte
Je suis confus au sujet de la une autre classe. Votre
Je suis confus au sujet de la une autre classe. Votre
AuthenticationMetrics
classe sera instanciée, ses champs seront injectés (aucun dans cet exemple), puis @PostConstruct
sera appelée. Si vous êtes l'injection de AuthenticationMetrics
quelque part, il sera injecté avant que quelque part's @PostConstrtuct
est invoquée.
OriginalL'auteur Daniele | 2017-06-21
Vous devez vous connecter pour publier un commentaire.
Si vous vous demandez est l'injection d'une classe donnée qui se passe après
@PostConstruct
dans ce haricot est appelé, alors la réponse est oui -@PostConstruct
est exécutée avant l'haricot est considéré comme "injectable"Si vous vous demandez si
@PostConstruct
sur le haricot est exécutée après que toutes les injections ont été faites, (sur le même bean) - alors oui -@PostConstruct
est exécuté après les injections sont engagés à des haricots. C'est la raison pour laquelle elle existe. Normalement, vous pourriez mettre@PostConstruct
actions dans le constructeur. Toutefois, lorsqu'un nouvel objet est créé (constructeur est appelé) les injections ne sont pas encore réalisé - de sorte que toute l'initialisation qui dépend injecté objets ont échoué en raison d'entrées en phase nationale. C'est pourquoi vous avez besoin@PostConstruct
vous pouvez supprimer cette partie: "Si vous demandez si @PostConstruct exécution signifie que le haricot est injecté quelque part - alors non." Je vais accepter la réponse.
OriginalL'auteur Antoniossss
Le traitement des annotations telles que
@PostConstruct
,@Resource
,@PreDestroy
se fait par l'intermédiaire d'un BeanPostProcessor, dans ce cas, le CommonAnnotationBeanPostProcessor. Vous pouvez le voir dans le diagramme ci-dessous à partir du Printemps que ces BPP sont traitées après l'Injection de Dépendance, mais avantBean Ready For Use
(ce Qui signifie autant que injectable).OriginalL'auteur Nico Van Belle