Lisez le code de NettyRPC et constatez RpcServer
中实现了 Spring 的 InitializingBean
qu'un serveur Netty a été démarré dans l'implémentation de la méthode et bloqué.
@Override
public void afterPropertiesSet() throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
// 前略...
future.channel().closeFuture().sync();
} finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
Adresse du code source :
https://github.com/luxiaoxun/...
Ce que je veux demander, c'est si un tel blocage affectera l'initialisation de Spring ? (Je n'ai pas lu le code source de Spring, donc je ne connais pas la situation. Veuillez me donner quelques conseils...
J'ai l'impression d'avoir posé une question très stupide... Le processus d'initialisation du conteneur Spring est monothread s'il est bloqué ici, cela signifie naturellement que... le travail de suivi ne peut pas être effectué.
Un Bean test est ajouté à la fin du fichier de configuration du bean, et le journal sera enregistré lors de l'initialisation, mais le résultat n'est pas imprimé.
Cela devrait être raisonnable, car si un bean est instancié par plusieurs threads, la dépendance entre le bean et le bean sera difficile à gérer et la complexité du code augmentera fortement.
Raisonnable, la raison a été évoquée ci-dessus. Si vous devez initialiser des beans de manière asynchrone, réécrivez simplement la logique de BeanFactory, à condition de vous assurer que ces beans ne dépendent pas les uns des autres