-
Notifications
You must be signed in to change notification settings - Fork 1
/
dubbo3.drawio
2729 lines (2729 loc) · 413 KB
/
dubbo3.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<mxfile host="Electron" modified="2024-01-23T07:55:49.175Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.5 Chrome/114.0.5735.243 Electron/25.3.1 Safari/537.36" etag="Z10WPSz8iTf5O8sq6ACX" version="21.6.5" type="device">
<diagram name="Dubbo主流程" id="0Qyq6zLl2fmwNNAztLvH">
<mxGraphModel dx="3694" dy="733" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="-dgZXbgsa9ORmBTnPNrw-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="-dgZXbgsa9ORmBTnPNrw-53" target="-OMnOMYa6ulq2eywQm4B-4" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="2500" y="6905" />
<mxPoint x="2500" y="6930" />
<mxPoint x="1300" y="6930" />
<mxPoint x="1300" y="6955" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Uk-qqwOQmqZAEX01Hiqb-83" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;" parent="1" source="Uk-qqwOQmqZAEX01Hiqb-82" target="Uk-qqwOQmqZAEX01Hiqb-38" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1400" y="3752.5" />
<mxPoint x="-1520" y="3752.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Uk-qqwOQmqZAEX01Hiqb-84" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;" parent="1" source="Uk-qqwOQmqZAEX01Hiqb-82" target="Uk-qqwOQmqZAEX01Hiqb-33" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1400" y="3752.5" />
<mxPoint x="-1240" y="3752.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Uk-qqwOQmqZAEX01Hiqb-91" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;endArrow=block;endFill=0;dashed=1;" parent="1" source="Uk-qqwOQmqZAEX01Hiqb-90" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-720" y="3722.5" as="targetPoint" />
<Array as="points">
<mxPoint x="-640" y="3742.5" />
<mxPoint x="-720" y="3742.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-109" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=diamondThin;endFill=1;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-96" target="LEzOs3IW3RDwebMgTtXX-26" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-1" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-86" target="VcwutDj3bW0QsIIaURAk-49" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1029.9999999999995" y="830.1764705882354" as="targetPoint" />
<Array as="points">
<mxPoint x="820" y="830" />
<mxPoint x="820" y="505" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-49" value="1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-1" vertex="1" connectable="0">
<mxGeometry x="-0.9223" y="2" relative="1" as="geometry">
<mxPoint y="-7" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="30zH5Bm8l3Furl-t-DYP-1" value="<h1 style="font-size: 16px;"><font style="font-size: 16px;">Dubbo工作原理 </font><font style="font-size: 16px; font-weight: normal;">(3.2.9)</font></h1><p style="font-size: 10px;">Dubbo3 是在云原生背景下诞生的,使用 Dubbo 构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。Dubbo或许能基于云原生迸发第二春;<br>Spring初始化相关代码流程做了简化,详细参考 spring-context.drawio。<br>官方源码解析:<span style="background-color: initial;">https://cn.dubbo.apache.org/zh-cn/blog/java/codeanalysis/3.0.8/ (个人感觉官方源码解析写的东西还是碎片化的,没多大帮助)</span></p><p style=""><span style="background-color: initial;"><font style="font-size: 10px;">关于Dubbo SPI 原理参考 dubbo-spi.drawio</font><br></span></p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="10" width="840" height="100" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-8" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-1" target="VcwutDj3bW0QsIIaURAk-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-9" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-1" target="VcwutDj3bW0QsIIaURAk-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-1" value="服务提供者和消费者<br>启动流程" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="40" y="220" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-11" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-2" target="VcwutDj3bW0QsIIaURAk-10" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="250" />
<mxPoint x="340" y="730" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-26" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-2" target="VcwutDj3bW0QsIIaURAk-22" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-27" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-2" target="VcwutDj3bW0QsIIaURAk-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-2" value="自动配置<br><font style="font-size: 10px;" color="#007fff">一些自动配置类<br>先看个大概,后面用到再逆向看<br></font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="200" y="220" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-3" value="接口层" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="40" y="120" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-29" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-4" target="VcwutDj3bW0QsIIaURAk-28" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="H5okSNMw3-DTD0Bd1JaA-105" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="VcwutDj3bW0QsIIaURAk-4" target="H5okSNMw3-DTD0Bd1JaA-104" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="200" y="7450" as="targetPoint" />
<Array as="points">
<mxPoint x="180" y="6970" />
<mxPoint x="180" y="7450" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-4" value="服务消费者调用" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="40" y="6940" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-6" value="<font color="#007fff">提供接口定义,用于服务提供者和消费者生成远程调用的服务端和客户端Stub</font>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="170" y="120" width="230" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-13" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-7" target="VcwutDj3bW0QsIIaURAk-12" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-7" value="系统初始化<br><font style="font-size: 9px;" color="#007fff"><b>自动配置</b>属于系统初始化,只不过总是先看自动配置的代码用于提供读源码的切入点</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="200" y="800" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-74" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-10" target="VcwutDj3bW0QsIIaURAk-73" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-10" value="@EnableDubbo" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="360" y="700" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-87" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="VcwutDj3bW0QsIIaURAk-86" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-88" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="VcwutDj3bW0QsIIaURAk-87" vertex="1" connectable="0">
<mxGeometry x="-0.263" y="-2" relative="1" as="geometry">
<mxPoint x="5" y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-65" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="LEzOs3IW3RDwebMgTtXX-59" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="570" y="830" />
<mxPoint x="570" y="990" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-66" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-65" vertex="1" connectable="0">
<mxGeometry x="0.7415" relative="1" as="geometry">
<mxPoint x="6" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-98" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="LEzOs3IW3RDwebMgTtXX-97" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-101" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-98" vertex="1" connectable="0">
<mxGeometry x="-0.571" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-106" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="LEzOs3IW3RDwebMgTtXX-105" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="570" y="830" />
<mxPoint x="570" y="1770" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-94" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-106" vertex="1" connectable="0">
<mxGeometry x="0.9637" y="-2" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-115" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="LEzOs3IW3RDwebMgTtXX-114" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="570" y="830" />
<mxPoint x="570" y="1070" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-92" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-115" vertex="1" connectable="0">
<mxGeometry x="0.8841" y="2" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-118" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="LEzOs3IW3RDwebMgTtXX-116" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="570" y="830" />
<mxPoint x="570" y="1930" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-95" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-118" vertex="1" connectable="0">
<mxGeometry x="0.9594" y="3" relative="1" as="geometry">
<mxPoint x="3" y="3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-122" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-12" target="LEzOs3IW3RDwebMgTtXX-121" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="570" y="830" />
<mxPoint x="570" y="1150" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-93" value="..." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-122" vertex="1" connectable="0">
<mxGeometry x="0.8799" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-12" value="<b>invokeBeanFactoryPostProcessors</b>(<br>beanFactory);<br><font color="#007fff">执行BeanFactory后置处理</font><br><font color="#007fff">主要是针对 BeanDefinition</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="360" y="800" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-31" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-22" target="VcwutDj3bW0QsIIaURAk-30" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-22" value="dubbo-spring-boot-starter<br style="font-size: 10px;"><font color="#007fff" style="font-size: 10px;">核心功能配置</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="360" y="220" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-72" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-24" target="VcwutDj3bW0QsIIaURAk-71" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-24" value="dubbo-nacos-spring-boot-starter<br style="font-size: 10px;"><font color="#007fff" style="font-size: 10px;">服务发现功能配置,支持Nacos、ZK、Consul、ETCD, 这里以Nacos为例</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="360" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="H5okSNMw3-DTD0Bd1JaA-102" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="-dgZXbgsa9ORmBTnPNrw-1" target="H5okSNMw3-DTD0Bd1JaA-101" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-28" value="本地调用" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="200" y="6940" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-33" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-30" target="VcwutDj3bW0QsIIaURAk-32" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-38" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-30" target="VcwutDj3bW0QsIIaURAk-34" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-39" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-30" target="VcwutDj3bW0QsIIaURAk-36" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-30" value="dubbo-spring-boot-autoconfigure<br>内部依赖&nbsp;<br>dubbo-spring-boot-autoconfigure-compatible" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="600" y="220" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-41" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-32" target="VcwutDj3bW0QsIIaURAk-40" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-44" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-32" target="VcwutDj3bW0QsIIaURAk-42" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1060" y="250" />
<mxPoint x="1060" y="330" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-32" value="DubboRelaxedBinding2AutoConfiguration<br><font color="#007fff">@ConditionalOnProperty 属性条件:dubbo.enabled = true, 默认就是true</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="220" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-46" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-34" target="VcwutDj3bW0QsIIaURAk-45" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-48" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-34" target="VcwutDj3bW0QsIIaURAk-47" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-53" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-34" target="VcwutDj3bW0QsIIaURAk-51" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-34" value="DubboAutoConfiguration" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-36" value="DubboRelaxedBindingAutoConfiguration<br><font color="#007fff">DubboRelaxedBinding2AutoConfiguration<br>存在的话此配置类不会起作用</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="300" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-59" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-40" target="VcwutDj3bW0QsIIaURAk-51" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1290" y="250" />
<mxPoint x="1290" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-40" value="@Bean(name = BASE_PACKAGES_BEAN_NAME)<br style="font-size: 10px;">Set&lt;String&gt; dubboBasePackages(...)<br><font color="#007fff">内部通过PropertyResolver读取base-packages</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1080" y="220" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-42" value="<div style="font-size: 9px;">@Bean(RELAXED_DUBBO_CONFIG</div><div style="font-size: 9px;">_BINDER_BEAN_NAME)</div><div style="font-size: 8px;"><span style="font-size: 9px;">&nbsp; &nbsp; @Scope(scopeName = </span><font style="font-size: 8px;">SCOPE_PROTOTYPE</font>)</div><div style="font-size: 9px;"><b style="font-size: 9px;">ConfigurationBeanBinder</b> relaxedDubboConfigBinder()<br style="font-size: 9px;"></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1080" y="300" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-45" value="@EnableConfigurationProperties({<br><b>DubboConfigurationProperties</b>.class})<br><font color="#007fff">Dubbo配置属性类</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1080" y="380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-50" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-47" target="VcwutDj3bW0QsIIaURAk-49" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-3" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-47" target="LEzOs3IW3RDwebMgTtXX-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-47" value="@EnableDubboConfig" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1080" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-5" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-49" target="LEzOs3IW3RDwebMgTtXX-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-49" value="@Import({<br style="font-size: 9px;"><b style="font-size: 9px;">DubboConfigConfigurationRegistrar</b>.class})" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1320" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-51" value="创建 <b>ServiceAnnotationPostProcessor</b>&nbsp;类型Bean通过&nbsp;@Qualifier(BASE_PACKAGES_BEAN_NAME) 注入依赖&nbsp;dubboBasePackages<br><font style="font-size: 9px;" color="#007fff">如果没有设置 dubbo.scan.base-packages 属性不会创建,测试DEMO没有配置此属性</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1080" y="540" width="200" height="80" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-58" value="<font color="#007fff" style="">创建了一个Bean dubboBasePackages<br style="font-size: 10px;"><span style="font-size: 10px;">内容是Dubbo base-packages 列表</span><br style="font-size: 10px;"></font>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1300" y="230" width="190" height="40" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-60" value="<font color="#007fff" style="">创建了一个Bean relaxedDubboConfigBinder<br style="font-size: 10px;">TODO 用途<br style="font-size: 10px;"></font>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1300" y="310" width="220" height="40" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-63" value="后面忽略一些ApplicationListener <br style="font-size: 10px;">和 应用上下文初始化器" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#007FFF;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="615" y="280" width="170" height="40" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-68" value="<font color="#007fff" style="font-size: 10px;"><br></font>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="1770" y="475" width="20" height="30" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-71" value="依赖 nacos-client" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="600" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-77" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-73" target="VcwutDj3bW0QsIIaURAk-76" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-73" value="<div>@EnableDubboConfig</div><div><b>@DubboComponentScan</b></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="600" y="700" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-79" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-76" target="VcwutDj3bW0QsIIaURAk-78" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-76" value="@Import(<br><b>DubboComponentScanRegistrar</b>.class)<br><div style="font-size: 9px;"><font color="#007fff" style="font-size: 9px;">主要是扫描 @DubboComponentScan basePakcages、basePackageClasses,</font><span style="color: rgb(0, 127, 255); background-color: initial;">@EnableDubbo scanBasePackages、scanBasePackageClasses 注册Bean定义</span></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="840" y="690" width="200" height="80" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-52" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-78" target="LEzOs3IW3RDwebMgTtXX-22" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1780" y="730" />
<mxPoint x="1780" y="505" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-54" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-78" target="LEzOs3IW3RDwebMgTtXX-53" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-63" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fillColor=#d5e8d4;strokeColor=#82b366;dashed=1;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-78" target="LEzOs3IW3RDwebMgTtXX-4" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1540" y="715" />
<mxPoint x="1540" y="505" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-78" value="<div>DubboSpringInitializer.initialize(registry);</div><div><font color="#007fff">前面已经执行过一次了,这次就不会再初始化了</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1080" y="700" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-84" value="<font color="#007fff" style="font-size: 10px;">如果想研究Dubbo服务一步步怎么启动的可以参考<br>日志输出,给对应的类加断点一步步调试,也可以顺着自动配置类一步步深入<br><br>如果只想看关键点实现原理,可以通过注解类、NacosClient&nbsp;<br>接口等找到相应代码加端点调试<br></font>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="200" y="290" width="280" height="90" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-85" value="<b>Spring refresh()</b>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="405" y="770" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-50" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;rounded=1;" parent="1" source="VcwutDj3bW0QsIIaURAk-86" target="VcwutDj3bW0QsIIaURAk-76" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="830" />
<mxPoint x="830" y="750" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-51" value="2" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LEzOs3IW3RDwebMgTtXX-50" vertex="1" connectable="0">
<mxGeometry x="-0.346" y="1" relative="1" as="geometry">
<mxPoint y="-9" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-86" value="<div style="font-size: 9px;"><font style="font-size: 9px;"><b>registrars</b>.forEach((registrar, metadata) -&gt;</font></div><div style="font-size: 9px;"><font style="font-size: 9px;">registrar.registerBeanDefinitions(metadata, this.registry,this.importBeanNameGenerator));</font></div><div style="font-size: 9px;"><font color="#007fff" style="font-size: 9px;">遍历所有ImportBeanDefinitionRegistrar实例注册BeanDefinition,这里只关注Dubbo的</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="600" y="800" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="VcwutDj3bW0QsIIaURAk-89" value="<font style="font-size: 10px;">ConfigurationClassBeanDefinitionReader</font>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="595" y="770" width="210" height="30" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-2" value="boolean <b>multiple</b>() default true;<br><div><font color="#007fff">用于选择Bean实现 DubboConfigConfiguration.<b>Single</b></font></div><div><font color="#007fff">或 DubboConfigConfiguration.<b>Multiple</b></font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;" parent="1" vertex="1">
<mxGeometry x="1320" y="380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-7" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-22" target="LEzOs3IW3RDwebMgTtXX-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-4" value="<b>DubboSpringInitializer</b>.initialize(registry);<br><font color="#007fff">registry是Bean工厂</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1560" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-15" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-6" target="LEzOs3IW3RDwebMgTtXX-14" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-17" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-6" target="LEzOs3IW3RDwebMgTtXX-16" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-6" value="customize(context);<br style="font-size: 10px;">" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="2040" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-21" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;endArrow=diamondThin;endFill=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-12" target="LEzOs3IW3RDwebMgTtXX-13" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-450" y="730" />
<mxPoint x="-450" y="760" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-12" value="<p style="margin: 4px 0px 0px; text-align: center; font-size: 10px;"><b style="font-size: 10px;">DubboSpringInitializer </b><span style="font-size: 10px;">Dubbo初始化上下文的容器</span><br style="font-size: 10px;"></p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><font color="#007fff">//Dubbo初始化上下文Map</font></p><p style="margin: 0px 0px 0px 4px; font-size: 10px;">private static final Map&lt;BeanDefinitionRegistry, DubboSpringInitContext&gt; <b>contextMap</b> =&nbsp;</p><p style="margin: 0px 0px 0px 4px; font-size: 10px;">&nbsp; new ConcurrentHashMap&lt;&gt;();</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;">public static void initialize(BeanDefinitionRegistry registry)</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-440" y="680" width="400" height="100" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-27" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endArrow=diamondThin;endFill=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-13" target="LEzOs3IW3RDwebMgTtXX-26" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-13" value="<p style="margin: 4px 0px 0px; text-align: center;"><b>DubboSpringInitContext</b><br style="font-size: 10px;"></p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><span style="background-color: initial;">private BeanDefinitionRegistry registry;</span><br></p><p style="margin: 0px 0px 0px 4px;">private ConfigurableListableBeanFactory beanFactory; <font color="#007fff">//Spring Bean容器</font></p><p style="margin: 0px 0px 0px 4px;">private ApplicationContext applicationContext;<span style="white-space: pre;">	</span><font color="#007fff">//Spring应用上下文</font></p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//DubboSpringInitializer初始化时创建了ApplicationModel对象,再借助此对象创建ModuleModel对象</font></p><p style="margin: 0px 0px 0px 4px;">private <b>ModuleModel</b> moduleModel;</p><p style="margin: 0px 0px 0px 4px; font-size: 9px;">private final Map&lt;String, Object&gt; <b>moduleAttributes</b> = new HashMap&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px; font-size: 9px;"><font style="font-size: 9px;" color="#007fff">//这里绑定的意思是DubboSpringInitContext、ApplicationModel、ModuleModel是否已经注册到Spring Bean容器</font></p><p style="margin: 0px 0px 0px 4px;">private volatile boolean <b>bound</b>;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#ffcd28;strokeColor=#d79b00;gradientColor=#ffa500;" parent="1" vertex="1">
<mxGeometry x="-920" y="680" width="440" height="160" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-43" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-14" target="LEzOs3IW3RDwebMgTtXX-42" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-14" value="applicationModel = ApplicationModel.<b>defaultModel</b>();<br style="font-size: 10px;">moduleModel = applicationModel.<b>getDefaultModule</b>();<br style="font-size: 10px;">context.<b>setModuleModel</b>(moduleModel);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=left;" parent="1" vertex="1">
<mxGeometry x="2040" y="620" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-19" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-16" target="LEzOs3IW3RDwebMgTtXX-18" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-41" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-16" target="LEzOs3IW3RDwebMgTtXX-40" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-16" value="<div style="font-size: 9px;">Set&lt;DubboSpringInitCustomizer&gt; customizers = FrameworkModel.<b>defaultModel</b>()</div><div style="">.getExtensionLoader(<font style="font-size: 8px;"><b>DubboSpringInitCustomizer</b></font>.class)</div><div style="font-size: 9px;">.getSupportedExtensionInstances();</div><div style="font-size: 9px;"><font color="#007fff">SPI 加载&nbsp;<b>DubboSpringInitCustomizer</b> 并遍历执行</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;" parent="1" vertex="1">
<mxGeometry x="2270" y="460" width="220" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-30" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-18" target="LEzOs3IW3RDwebMgTtXX-29" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-18" value="defaultInstance = new <b>FrameworkModel</b>();<br><font color="#007fff">初始化了很多内部的组件,TODO 后面用到再回来看,需要结合业务理解</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="2520" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-25" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-20" target="LEzOs3IW3RDwebMgTtXX-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-20" value="<p style="margin: 4px 0px 0px; text-align: center;"><b>FrameworkModel </b>框架模型, 单例模式<br style="font-size: 10px;"></p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;">public static final String NAME = "FrameworkModel";</p><p style="margin: 0px 0px 0px 4px;">private static final AtomicLong index = new AtomicLong(1);</p><p style="margin: 0px 0px 0px 4px;">private static final Object globalLock = new Object();</p><p style="margin: 0px 0px 0px 4px;">private <b>static</b> volatile FrameworkModel <b>defaultInstance</b>;</p><p style="margin: 0px 0px 0px 4px;">private <b>static</b> final List&lt;FrameworkModel&gt; <b>allInstances</b> = new CopyOnWriteArrayList&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;"><br></p><p style="margin: 0px 0px 0px 4px;">private final AtomicLong appIndex = new AtomicLong(0);</p><p style="margin: 0px 0px 0px 4px;">private volatile ApplicationModel <b>defaultAppModel</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//内部包含的 ApplicationModel</font></p><p style="margin: 0px 0px 0px 4px;">private final List&lt;ApplicationModel&gt; <b>applicationModels</b> = new CopyOnWriteArrayList&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;">private final List&lt;ApplicationModel&gt; <b>pubApplicationModels</b> = new CopyOnWriteArrayList&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//ProviderModel的容器</font></p><p style="margin: 0px 0px 0px 4px;">private final FrameworkServiceRepository <b>serviceRepository</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//创建FrameworkModel时会默认创建一个ApplicationModel实例</font></p><font color="#007fff">&nbsp;Dubbo Application[1.0](unknown)</font><p style="margin: 0px 0px 0px 4px;">private final ApplicationModel <b>internalApplicationModel</b>;</p><p style="margin: 0px 0px 0px 4px;">private final ReentrantLock destroyLock = new ReentrantLock();</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;">public ApplicationModel getApplicationModel()&nbsp;<br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1400" y="400" width="440" height="270" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-23" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-4" target="LEzOs3IW3RDwebMgTtXX-22" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1760" y="490" as="sourcePoint" />
<mxPoint x="2040" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-22" value="创建初始化上下文 <b>DubboSpringInitContext</b> 实例,然后执行初始化" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;" parent="1" vertex="1">
<mxGeometry x="1800" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-24" value="<div style="text-align: center;"><b>ScopeModel </b>(A)</div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;">private String internalId; <font color="#007fff">//模型的层次结构</font></p><p style="margin: 0px 0px 0px 4px;">private String modelName; <font color="#007fff">//公共模型名称</font></p><p style="margin: 0px 0px 0px 4px;">private String desc;</p><p style="margin: 0px 0px 0px 4px;">private final Set&lt;ClassLoader&gt; classLoaders = new ConcurrentHashSet&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;">private final ScopeModel parent;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//当前模型的所属域ExtensionScope有:FRAMEWORK(框架),APPLICATION(应用),MODULE(模块),SELF(自给自足,为每个作用域创建一个实例,用于特殊的SPI扩展,如ExtensionInjector)</font></p><p style="margin: 0px 0px 0px 4px;">private final ExtensionScope <b>scope</b>;</p><p style="margin: 0px 0px 0px 4px;"><font style="font-size: 9px;" color="#007fff">//Dubbo SPI ExtensionLoader 的管理器,即拓展类加载器的管理器,保存各种类型拓展类的类加载器</font></p><p style="margin: 0px 0px 0px 4px;">private volatile ExtensionDirector <b>extensionDirector</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//用于Dubbo内部共享对象的存储</font></p><p style="margin: 0px 0px 0px 4px;">private volatile ScopeBeanFactory <b>beanFactory</b>;</p><p style="margin: 0px 0px 0px 4px;">private final List&lt;ScopeModelDestroyListener&gt; destroyListeners = new CopyOnWriteArrayList&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;">private final List&lt;ScopeClassLoaderListener&gt; classLoaderListeners = new CopyOnWriteArrayList&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;">private final Map&lt;String, Object&gt; attributes = new ConcurrentHashMap&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;">private final AtomicBoolean destroyed = new AtomicBoolean(false);</p><p style="margin: 0px 0px 0px 4px;">private final boolean internalScope;</p><p style="margin: 0px 0px 0px 4px;">protected final Object instLock = new Object();</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-920" y="40" width="440" height="280" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-28" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-26" target="LEzOs3IW3RDwebMgTtXX-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-26" value="<div style="text-align: center;"><b>ModuleModel&nbsp;</b></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">应用的服务模块,不是对应某个具体的组件,也可能是一组组件的集合</font></p><p style="margin: 0px 0px 0px 4px;"><br></p><p style="margin: 0px 0px 0px 4px;">public static final String NAME = "ModuleModel";</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//所属的ApplicationModel</font></p><p style="margin: 0px 0px 0px 4px;">private final ApplicationModel <b>applicationModel</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//services consumers providers 的容器</font></p><p style="margin: 0px 0px 0px 4px;">private volatile ModuleServiceRepository <b>serviceRepository</b>;</p><p style="margin: 0px 0px 0px 4px;">//</p><p style="margin: 0px 0px 0px 4px;">private volatile ModuleEnvironment moduleEnvironment;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// 一组组件配置的容器</font></p><p style="margin: 0px 0px 0px 4px;">private volatile <b>ModuleConfigManager</b> <b>moduleConfigManager</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// 服务模块的起动器,在 ConfigScopeModelInitializer 中创建并赋值</font></p><p style="margin: 0px 0px 0px 4px;">private volatile <b>ModuleDeployer</b> <b>deployer</b>;</p><p style="margin: 0px 0px 0px 4px;">private boolean lifeCycleManagedExternally = false;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-920" y="400" width="440" height="220" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-32" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-29" target="LEzOs3IW3RDwebMgTtXX-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-29" value="initialize();" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;" parent="1" vertex="1">
<mxGeometry x="2760" y="460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-34" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-31" target="LEzOs3IW3RDwebMgTtXX-33" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-31" value="TypeDefinitionBuilder.initBuilders(this);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;" parent="1" vertex="1">
<mxGeometry x="2760" y="540" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-36" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-33" target="LEzOs3IW3RDwebMgTtXX-35" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="2860" y="690" />
<mxPoint x="2900" y="690" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-33" value="serviceRepository = new FrameworkServiceRepository(this);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;" parent="1" vertex="1">
<mxGeometry x="2760" y="620" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-38" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-35" target="LEzOs3IW3RDwebMgTtXX-37" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="2900" y="790" />
<mxPoint x="2960" y="790" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="H5okSNMw3-DTD0Bd1JaA-99" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="LEzOs3IW3RDwebMgTtXX-35" target="H5okSNMw3-DTD0Bd1JaA-98" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="H5okSNMw3-DTD0Bd1JaA-100" value="比如" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=9;" parent="H5okSNMw3-DTD0Bd1JaA-99" vertex="1" connectable="0">
<mxGeometry x="-0.05" y="-3" relative="1" as="geometry">
<mxPoint y="-3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-35" value="<div>ExtensionLoader&lt;ScopeModelInitializer&gt; initializerExtensionLoader =</div><div>this.getExtensionLoader(<b>ScopeModelInitializer</b>.class);</div><div>Set&lt;ScopeModelInitializer&gt; <b>initializers</b> = initializerExtensionLoader.getSupportedExtensionInstances();</div><div>for (ScopeModelInitializer initializer : <b>initializers</b>) {</div><div>&nbsp; initializer.<b>initializeFrameworkModel</b>(this);</div><div>}</div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=7;" parent="1" vertex="1">
<mxGeometry x="2760" y="700" width="280" height="80" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-37" value="<div>internalApplicationModel = new <b>ApplicationModel</b>(this, true);</div><div>internalApplicationModel</div><div>&nbsp; &nbsp; .getApplicationConfigManager()</div><div>&nbsp; &nbsp; .setApplication(new <b>ApplicationConfig</b>(</div><div>&nbsp; &nbsp; &nbsp; &nbsp; internalApplicationModel, CommonConstants.DUBBO_INTERNAL_APPLICATION));</div><div>internalApplicationModel.setModelName(CommonConstants.DUBBO_INTERNAL_APPLICATION);</div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=7;" parent="1" vertex="1">
<mxGeometry x="2760" y="800" width="400" height="80" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-39" value="initializers = {LinkedHashSet@5781} size = 14
 0 = {CertScopeModelInitializer@5784} 
 1 = {ClusterScopeModelInitializer@5788} 
 2 = {CommonScopeModelInitializer@5789} 
 3 = {ConfigScopeModelInitializer@5790} 
 4 = {SpringScopeModelInitializer@5791} 
 5 = {MetadataScopeModelInitializer@5792} 
 6 = {MetricsScopeModelInitializer@5793} 
 7 = {RegistryScopeModelInitializer@5794} 
 8 = {RemotingScopeModelInitializer@5795} 
 9 = {Fastjson2ScopeModelInitializer@5796} 
 10 = {Hessian2ScopeModelInitializer@5797} 
 11 = {QosScopeModelInitializer@5798} 
 12 = {RpcScopeModelInitializer@5799} 
 13 = {XdsScopeModelInitializer@5800}" style="text;whiteSpace=wrap;fontSize=10;fontColor=#007FFF;" parent="1" vertex="1">
<mxGeometry x="3060" y="510" width="280" height="190" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-40" value="<div>DubboSpringInitCustomizerHolder customizerHolder = DubboSpringInitCustomizerHolder.get();</div><div style="font-size: 9px;">customizers = customizerHolder.getCustomizers();</div><div style="font-size: 9px;"></div><font color="#007fff">从 DubboSpringInitCustomizerHolder 读取<span style="background-color: initial;"><b>DubboSpringInitCustomizer</b> 并遍历执行</span><br></font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;" parent="1" vertex="1">
<mxGeometry x="2270" y="540" width="220" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-45" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-42" target="LEzOs3IW3RDwebMgTtXX-44" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-48" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-42" target="LEzOs3IW3RDwebMgTtXX-104" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="2280" y="840" as="targetPoint" />
<Array as="points">
<mxPoint x="2260" y="730" />
<mxPoint x="2260" y="840" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-42" value="<div style="font-size: 9px;"><b style="font-size: 9px;">registerContextBeans</b>(beanFactory, context);</div><div style="font-size: 9px;">context.markAsBound();</div><div style="font-size: 9px;">moduleModel.setLifeCycleManagedExternally(true);</div><div style="font-size: 9px;">DubboBeanUtils.<b style="font-size: 9px;">registerCommonBeans</b>(registry);</div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="2030" y="700" width="220" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-44" value="<div style="font-size: 10px;"><div>registerSingleton(beanFactory, <b>context</b>);</div><div>registerSingleton(beanFactory, <br>&nbsp; context.<b>getApplicationModel</b>());</div><div>registerSingleton(beanFactory, <br>&nbsp; context.<b>getModuleModel</b>());</div></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=left;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="2280" y="700" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-46" value="<font color="#007fff" style="font-size: 10px;">将DubboSpringInitContext、ApplicationModel、<br>ModuleModel 实例注册到Spring容器</font>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="2481" y="710" width="240" height="40" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-56" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-53" target="LEzOs3IW3RDwebMgTtXX-55" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-53" value="Set&lt;String&gt; packagesToScan = getPackagesToScan(<br>importingClassMetadata);<br><font color="#007fff" style="font-size: 9px;">从注解中提取需要扫描的包路径,测试DEMO中就是“org.apache.dubbo.springboot.demo.provider”</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1080" y="780" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-58" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-55" target="LEzOs3IW3RDwebMgTtXX-57" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-55" value="registerServiceAnnotationPostProcessor(<br>packagesToScan, registry);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1080" y="860" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-60" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-57" target="LEzOs3IW3RDwebMgTtXX-59" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1420" y="950" />
<mxPoint x="705" y="950" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-57" value="BeanDefinitionBuilder builder = rootBeanDefinition(<br><b>&nbsp; ServiceAnnotationPostProcessor</b>.class);<br>AbstractBeanDefinition beanDefinition = <br>&nbsp; builder.getBeanDefinition();<br style="font-size: 9px;">BeanDefinitionReaderUtils.registerWithGeneratedName(<br>&nbsp; beanDefinition, registry);<br><font color="#007fff">注册了ServiceAnnotationPostProcessor 这个后置处理器BeanDefinition<br></font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1300" y="840" width="240" height="100" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-68" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-59" target="LEzOs3IW3RDwebMgTtXX-67" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-72" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-59" target="LEzOs3IW3RDwebMgTtXX-71" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-96" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-59" target="LEzOs3IW3RDwebMgTtXX-95" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-59" value="<b style="font-size: 10px;">ServiceAnnotationPostProcessor</b><br style="font-size: 10px;"><font color="#007fff" style="font-size: 10px;">实现 BeanDefinitionRegistryPostProcessor 接口,用于扫描Dubbo服务的BeanDefinition</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="960" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-70" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-67" target="LEzOs3IW3RDwebMgTtXX-69" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-67" value="<font style="font-size: 10px;">ServiceAnnotationPostProcessor#<br><b>afterPropertiesSet</b>()</font><br><font color="#007fff">前面定义了此后置处理器的Bean定义,此后置处理器也需要先创建自身的Bean,然后为其他Bean执行后置处理,自身的Bean初始化后执行此方法</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="960" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-69" value="this.<b style="font-size: 10px;">resolvedPackagesToScan</b> = resolvePackagesToScan(packagesToScan);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="960" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-74" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-71" target="LEzOs3IW3RDwebMgTtXX-73" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-71" value="ServiceAnnotationPostProcessor#<br style="font-size: 10px;"><b style="font-size: 10px;">postProcessBeanDefinitionRegistry</b>(<br style="font-size: 10px;">BeanDefinitionRegistry registry)" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="1200" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-79" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-73" target="LEzOs3IW3RDwebMgTtXX-78" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1340" y="1230" />
<mxPoint x="1340" y="990" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-73" value="this.registry = registry;<br style="font-size: 10px;"><b style="font-size: 10px;">scanServiceBeans</b>(<br style="font-size: 10px;">resolvedPackagesToScan, registry);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1200" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-5" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-75" target="omU1pgqW6LJjpDUwzffS-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-75" value="<div style="text-align: center;"><b>ServiceAnnotationPostProcessor</b></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"></p><font color="#007fff">&nbsp;此后置处理器用于扫描Dubbo服务(@DubboService @Service)并注册BeanDefinition<br><br></font><p style="margin: 0px 0px 0px 4px;">public static final String BEAN_NAME = "dubboServiceAnnotationPostProcessor";</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// 扫描的注解类型,Dubbo服务定义注解是 @DubboService @Service (不是Spring的 @Service)</font></p><p style="margin: 0px 0px 0px 4px;">private static final List&lt;Class&lt;? extends Annotation&gt;&gt; <b>serviceAnnotationTypes</b> = <br>&nbsp; loadServiceAnnotationTypes();</p>&nbsp; <font color="#007fff">//原始需要扫描的包路径,可以通过配置文件、注解修改</font><p style="margin: 0px 0px 0px 4px;">protected final Set&lt;String&gt; <b>packagesToScan</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//经过处理后最终需要扫描的包路径(比如原始包路径可能有多个使用分隔符连接)</font></p><p style="margin: 0px 0px 0px 4px;">private Set&lt;String&gt; <b>resolvedPackagesToScan</b>;</p><p style="margin: 0px 0px 0px 4px;">private Environment environment;</p><p style="margin: 0px 0px 0px 4px;">private ResourceLoader resourceLoader;</p><p style="margin: 0px 0px 0px 4px;">private ClassLoader classLoader;</p><p style="margin: 0px 0px 0px 4px;">private BeanDefinitionRegistry <b>registry</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//已经扫描过的包和类的记录器,用于ExcludeFilter防止重复扫描</font></p><p style="margin: 0px 0px 0px 4px;">private ServicePackagesHolder <b>servicePackagesHolder</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//是否已经开始扫描BeanDefinition</font></p><p style="margin: 0px 0px 0px 4px;">private volatile boolean <b>scanned</b> = false;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-480" y="1120" width="440" height="280" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-81" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-78" target="LEzOs3IW3RDwebMgTtXX-80" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-78" value="<div>DubboClassPathBeanDefinitionScanner scanner =&nbsp;<span style="background-color: initial;">new&nbsp;<b>DubboClassPathBeanDefinitionScanner</b>(</span></div><div><span style="background-color: initial;">registry, environment, resourceLoader);</span></div><div><span style="background-color: initial;"><font color="#007fff">Dubbo 重写了BeanDefinition扫描器用于扫描Dubbo服务</font></span></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;" parent="1" vertex="1">
<mxGeometry x="1361" y="960" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-83" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-80" target="LEzOs3IW3RDwebMgTtXX-82" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-80" value="<div>for (Class&lt;? extends Annotation&gt; annotationType <br>&nbsp; &nbsp; : <b>serviceAnnotationTypes</b>) {</div><div>&nbsp; scanner.<b>addIncludeFilter</b>(new <br>&nbsp; &nbsp; &nbsp;AnnotationTypeFilter(annotationType));</div><div>}</div><div><font color="#007fff">给每个注解类型注册了一个过滤器</font></div><div><font color="#007fff">即用于过滤 <b>@DubboService</b> <b>@Service</b>注解的类</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=9;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1361" y="1040" width="200" height="80" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-85" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-82" target="LEzOs3IW3RDwebMgTtXX-84" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-82" value="<div><div>ScanExcludeFilter scanExcludeFilter = new ScanExcludeFilter();</div><div>scanner.addExcludeFilter(scanExcludeFilter);</div></div><div><font color="#007fff">还注册了一个排除过滤器,看实现是防止重复扫描的</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=9;" parent="1" vertex="1">
<mxGeometry x="1361" y="1140" width="200" height="80" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-87" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-84" target="LEzOs3IW3RDwebMgTtXX-86" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-84" value="<div>for (String packageToScan : packagesToScan):<br></div><div>scanner.<b>scan</b>(packageToScan);<br></div><div><font color="#007fff">遍历所有包路径执行扫描,扫描到的类的BeanDefinition 注册到Spring Bean容器,在 <b>beanDefinitionMap</b> 中可以查到</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=9;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="1361" y="1240" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-89" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-86" target="LEzOs3IW3RDwebMgTtXX-88" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-86" value="<div style="font-size: 9px;"><div style="font-size: 9px;">Set&lt;BeanDefinitionHolder&gt; beanDefinitionHolders =</div><div style="font-size: 9px;">findServiceBeanDefinitionHolders(scanner, packageToScan, registry, beanNameGenerator);</div></div><div style="font-size: 9px;"><font color="#007fff" style="font-size: 9px;">又扫描了一次,这次将BeanDefinition和BeanName封装成了BeanDefinitionHolder<br style="font-size: 9px;"></font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=9;" parent="1" vertex="1">
<mxGeometry x="1356" y="1320" width="210" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-91" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-88" target="LEzOs3IW3RDwebMgTtXX-90" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-88" value="<div style=""><div style="">for <b>beanDefinitionHolders</b>:</div><div style=""><b>processScannedBeanDefinition</b>(</div><div style="">&nbsp; beanDefinitionHolder);<br></div><div style=""><font color="#007fff">遍历第二次扫描获取的BeanDefinitionHolder,依次<b>创建</b>并注册RootBeanDefinition实例到Spring容器</font></div></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=left;arcSize=9;" parent="1" vertex="1">
<mxGeometry x="1356" y="1400" width="210" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-90" value="<div style=""><div style="">registry.<b>registerBeanDefinition</b>(</div><div style="">serviceBeanName, serviceBeanDefinition);<br></div><div style=""><font color="#007fff">如果已经注册且是同一BeanDefinition就直接返回,不是同一个就抛异常,没有注册就重新注册</font></div></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;arcSize=9;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="1601" y="1400" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-51" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-95" target="omU1pgqW6LJjpDUwzffS-50" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-95" value="<font style="font-size: 10px;">ServiceAnnotationPostProcessor#<br style=""></font><b style="font-size: 9px;">postProcessBeanFactory</b>(<br style="font-size: 9px;">ConfigurableListableBeanFactory beanFactory)<br style="font-size: 9px;"><font style="font-weight: bold; font-size: 9px;" color="#007fff">处理配置类中 @Bean方法的 Dubbo Service注解</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="1640" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-100" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-97" target="LEzOs3IW3RDwebMgTtXX-99" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-109" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-97" target="LEzOs3IW3RDwebMgTtXX-107" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="580" y="2230" />
<mxPoint x="580" y="2410" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-123" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-97" target="LEzOs3IW3RDwebMgTtXX-120" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-97" value="<div><b>finishBeanFactoryInitialization</b>(</div><div>beanFactory)</div><div><font color="#007fff">Bean实例化与初始化</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="360" y="2200" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-111" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-99" target="LEzOs3IW3RDwebMgTtXX-110" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="560" y="2790" />
<mxPoint x="560" y="2790" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-99" value="<div><b>finishRefresh()</b></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="360" y="2760" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-104" value="<div style=""><div style="font-size: 9px;">又往Spring容器注册了几个<b>BeanDefinition</b>:</div><div style="font-size: 9px;">ServicePackagesHolder<br style="font-size: 9px;"></div><div style="font-size: 9px;"><b>ReferenceBeanManager</b><br style="font-size: 9px;"></div><div style="font-size: 9px;">ReferenceAnnotationBeanPostProcessor<br style="font-size: 9px;">DubboConfigAliasPostProcessor<br style="font-size: 9px;"><b>DubboDeployApplicationListener</b><br style="font-size: 9px;">DubboConfigApplicationListener<br style="font-size: 9px;"></div><div style=""><font style="font-size: 8px;">DubboConfigDefaultPropertyValueBeanPostProcessor</font><br style="font-size: 9px;"></div><div style="font-size: 9px;">DubboConfigBeanInitializer<br style="font-size: 9px;"></div><div style="font-size: 9px;">DubboInfraBeanRegisterPostProcessor<br style="font-size: 9px;"></div></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;fillColor=#ffe6cc;strokeColor=#d79b00;arcSize=4;" parent="1" vertex="1">
<mxGeometry x="2280" y="780" width="201" height="120" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-20" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-105" target="omU1pgqW6LJjpDUwzffS-19" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-105" value="<b style="font-size: 10px;">ReferenceAnnotationBeanPostProcessor</b><font color="#007fff">实现了BeanDefinitionRegistryPostProcessor接口,用于扫描Dubbo消费者</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="1740" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-34" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-107" target="omU1pgqW6LJjpDUwzffS-33" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-107" value="<span style="font-size: 10px;"><b>DubboConfigBeanInitializer</b><br><font style="" color="#007fff">这是一个普通Bean</font><br></span>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="2380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-189" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-110" target="omU1pgqW6LJjpDUwzffS-188" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-110" value="<span style="font-size: 10px;">DubboDeployApplicationListener#</span><br>onApplicationEvent(ApplicationContextEvent event)<br><font color="#007fff">实现了Spring ApplicationListener,主要关注Spring ContextRefreshedEvent 事件的处理</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="600" y="2760" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-38" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-114" target="omU1pgqW6LJjpDUwzffS-37" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="780" y="1070" />
<mxPoint x="780" y="1070" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-114" value="<b style="font-size: 10px;">DubboConfigAliasPostProcessor</b><br><font style="font-size: 10px;" color="#007fff">别名处理,就是在Bean初始化后往<br></font><font color="#007fff">BeanDefinitionRegistry中给Bean注册一下别名</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="1040" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-116" value="<span style="font-size: 10px;"><b>DubboConfigDefaultPropertyValue</b><br><b>BeanPostProcessor</b><br><font style="" color="#007fff">在Bean初始化之前给Bean设置属性,TODO</font><br></span>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="1900" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-36" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-120" target="omU1pgqW6LJjpDUwzffS-35" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-89" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-120" target="omU1pgqW6LJjpDUwzffS-88" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-120" value="<span style="font-size: 10px;"><b>ReferenceAnnotationBeanPostProcessor</b><br><font style="" color="#007fff">同时实现了 BeanPostProcessor及其子接口<br></font><font color="#007fff">分析消费者时再细看</font><br></span>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="2200" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-42" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-121" target="omU1pgqW6LJjpDUwzffS-41" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-47" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;rounded=1;" parent="1" source="LEzOs3IW3RDwebMgTtXX-121" target="omU1pgqW6LJjpDUwzffS-45" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="810" y="1150" />
<mxPoint x="810" y="1430" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LEzOs3IW3RDwebMgTtXX-121" value="<b>DubboInfraBeanRegisterPostProcessor</b>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="1120" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-1" value="Dubbo注册了很多各种类型后置处理器,<br>最好先梳理下各类型后置处理器及方法的执行时机" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="200" y="880" width="240" height="90" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-4" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-2" target="omU1pgqW6LJjpDUwzffS-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-2" value="<p style="margin: 4px 0px 0px; text-align: center;"><b>BeanDefinitionRegistryPostProcessor (I)</b><br style="font-size: 10px;"></p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><span style="background-color: initial;">void </span><b style="background-color: initial;">postProcessBeanDefinitionRegistry</b><span style="background-color: initial;">(BeanDefinitionRegistry var1) throws BeansException;</span><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-480" y="980" width="440" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-3" value="<p style="margin: 4px 0px 0px; text-align: center;"><b>BeanFactoryPostProcessor (I)</b><br style="font-size: 10px;"></p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><span style="background-color: initial;">void </span><b style="background-color: initial;">postProcessBeanFactory</b><span style="background-color: initial;">(ConfigurableListableBeanFactory beanFactory) throws BeansException;</span><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-480" y="880" width="440" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-8" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-6" target="omU1pgqW6LJjpDUwzffS-3" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-630" y="1360" />
<mxPoint x="-500" y="1360" />
<mxPoint x="-500" y="970" />
<mxPoint x="-370" y="970" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-15" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-6" target="omU1pgqW6LJjpDUwzffS-11" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-6" value="<div style="text-align: center;"><b>ReferenceAnnotationBeanPostProcessor</b><br></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"></p><font color="#007fff">&nbsp;此后置处理器可扫描Dubbo消费者(@DubboReference&nbsp;@Reference)并注册BeanDefinition<br><br></font><p style="margin: 0px 0px 0px 4px;">public static final String BEAN_NAME = "referenceAnnotationBeanPostProcessor";</p><p style="margin: 0px 0px 0px 4px;">private static final int CACHE_SIZE = Integer.getInteger(BEAN_NAME + ".cache.size", 32);</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//已经解析的注释(创建BeanDefinition并注册到Spring容器和referenceBeanManager</font><span style="color: rgb(0, 127, 255); background-color: initial;">)有@DubboReference @Reference的<b>字段</b>的名称</span></p><p style="margin: 0px 0px 0px 4px;">private final ConcurrentMap&lt;InjectionMetadata.InjectedElement, String&gt; <b>injectedFieldReferenceBeanCache</b> =</p><p style="margin: 0px 0px 0px 4px;">&nbsp; &nbsp; &nbsp; &nbsp; new ConcurrentHashMap&lt;&gt;(CACHE_SIZE);</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//已经解析的注释(创建BeanDefinition并注册到Spring容器和referenceBeanManager)有@DubboReference @Reference的<b>@Bean方法</b>的名称</font><br></p><p style="margin: 0px 0px 0px 4px;">private final ConcurrentMap&lt;InjectionMetadata.InjectedElement, String&gt; <b>injectedMethodReferenceBeanCache</b> =</p><p style="margin: 0px 0px 0px 4px;">&nbsp; &nbsp; &nbsp; &nbsp; new ConcurrentHashMap&lt;&gt;(CACHE_SIZE);</p><p style="margin: 0px 0px 0px 4px;">private ApplicationContext applicationContext;</p><p style="margin: 0px 0px 0px 4px;">private ReferenceBeanManager <b>referenceBeanManager</b>;</p><p style="margin: 0px 0px 0px 4px;">private BeanDefinitionRegistry <b>beanDefinitionRegistry</b>;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-960" y="1400" width="440" height="260" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-17" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-9" target="omU1pgqW6LJjpDUwzffS-16" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-9" value="<div style="text-align: center;"><b>MergedBeanDefinitionPostProcessor</b><b style="background-color: initial;">&nbsp;(I)</b></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;">void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class&lt;?&gt; beanType, String beanName);<br></p><p style="margin: 0px 0px 0px 4px;">void resetBeanDefinition(String beanName)<br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-960" y="980" width="440" height="70" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-13" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-11" target="omU1pgqW6LJjpDUwzffS-9" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-14" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;dashed=1;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-11" target="omU1pgqW6LJjpDUwzffS-12" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-11" value="<div style="text-align: center;"><b>AbstractAnnotationBeanPostProcessor</b><br></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"></p><font color="#007fff"><br></font><p style="margin: 0px 0px 0px 4px;">private static final int CACHE_SIZE = Integer.getInteger("", 32);</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//@DubboReference @Reference 还有一个老版本的@Reference</font></p><p style="margin: 0px 0px 0px 4px;">private final Class&lt;? extends Annotation&gt;[] <b>annotationTypes</b>;</p><p style="margin: 0px 0px 0px 4px;">private final ConcurrentMap&lt;String, AbstractAnnotationBeanPostProcessor.AnnotatedInjectionMetadata&gt;</p><p style="margin: 0px 0px 0px 4px;">&nbsp; &nbsp; &nbsp; &nbsp; <b>injectionMetadataCache</b> = new ConcurrentHashMap&lt;</p><p style="margin: 0px 0px 0px 4px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String, AbstractAnnotationBeanPostProcessor.AnnotatedInjectionMetadata&gt;(CACHE_SIZE);</p><p style="margin: 0px 0px 0px 4px;">private ConfigurableListableBeanFactory <b>beanFactory</b>;</p><p style="margin: 0px 0px 0px 4px;">private Environment <b>environment</b>;</p><p style="margin: 0px 0px 0px 4px;">private ClassLoader <b>classLoader</b>;</p><p style="margin: 0px 0px 0px 4px;">private int order = Ordered.LOWEST_PRECEDENCE;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-960" y="1120" width="440" height="200" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-18" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endArrow=block;endFill=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-12" target="omU1pgqW6LJjpDUwzffS-16" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-12" value="<div style="text-align: center;"><b>InstantiationAwareBeanPostProcessor</b><b style="background-color: initial;">&nbsp;(I)</b></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;">Object postProcessBeforeInstantiation(Class&lt;?&gt; beanClass, String beanName) throws&nbsp;<br>&nbsp; BeansException;<br></p><p style="margin: 0px 0px 0px 4px;">boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException;<br></p><p style="margin: 0px 0px 0px 4px;">PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)</p><p style="margin: 0px 0px 0px 4px;">&nbsp; throws BeansException<span style=""></span></p><p style="margin: 0px 0px 0px 4px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-1440" y="980" width="440" height="90" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-16" value="<p style="margin: 4px 0px 0px; text-align: center;"><b>BeanFactoryPostProcessor (I)</b><br style="font-size: 10px;"></p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px;">Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;<br></p><p style="margin: 0px 0px 0px 4px;">Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;<br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-960" y="880" width="440" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-22" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-65" target="omU1pgqW6LJjpDUwzffS-21" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-19" value="<span style="font-size: 10px;">ReferenceAnnotationBeanPostProcessor#<br></span><span style="background-color: initial;"><b>postProcessBeanFactory</b>(<br></span><span style="background-color: initial;"><font style="font-size: 9px;">ConfigurableListableBeanFactory beanFactory)</font></span><span style="color: rgb(0, 127, 255); background-color: initial;"><br></span><font color="#007fff"><b>扫描所有Bean定义</b>,查看内部是否有注解<br>@DubboReference @Reference<br></font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="1740" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-68" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-21" target="omU1pgqW6LJjpDUwzffS-67" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-71" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#dae8fc;strokeColor=#000000;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-21" target="omU1pgqW6LJjpDUwzffS-70" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-21" value="AnnotatedInjectionMetadata metadata = <b>findInjectionMetadata</b>(beanName, beanType, null);<br><font color="#007fff">查找类中@DubboReference @Reference注解的字段或@Bean方法,并缓存</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1080" y="1820" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-26" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-23" target="omU1pgqW6LJjpDUwzffS-25" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-23" value="beanDefinitionRegistry<br>.removeBeanDefinition(BEAN_NAME);<br><font style="font-size: 10px;" color="#007fff">删除后置处理器ReferenceAnnotationBeanPostProcessor,<br>因为到这里这个后置处理器任务就完成了<br></font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1980" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-114" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-25" target="omU1pgqW6LJjpDUwzffS-111" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1300" y="2090" />
<mxPoint x="1300" y="2590" />
<mxPoint x="590" y="2590" />
<mxPoint x="590" y="2630" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-115" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-25" target="omU1pgqW6LJjpDUwzffS-112" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1300" y="2090" />
<mxPoint x="1300" y="2590" />
<mxPoint x="590" y="2590" />
<mxPoint x="590" y="2710" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-25" value="applicationContext.publishEvent(new <b>DubboConfigInitEvent</b>(applicationContext));" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1080" y="2060" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-31" style="orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-28" target="omU1pgqW6LJjpDUwzffS-30" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-28" value="<div style="font-size: 10px;">这一步注册的是 ScannedGenericBeanDefinition</div><div style="font-size: 10px;">beanName是类名首字母小写,比如 demoServiceImpl</div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#007FFF;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1566" y="1255" width="320" height="30" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-32" style="orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-29" target="omU1pgqW6LJjpDUwzffS-30" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-29" value="<div style="font-size: 10px;"><div>这一步注册的是 RootBeanDefinition</div><div>beanName是 “ServiceBean:&lt;接口全限定名&gt;::” ,</div><div>比如 ServiceBean:org.apache.dubbo.springboot.demo.DemoService::</div></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#007FFF;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1811" y="1415" width="320" height="30" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-30" value="<div style=""><b>正好对应注册中心里面每个Dubbo服务注册的两个服务实例</b><br></div>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#007FFF;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1681" y="1330" width="320" height="30" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-64" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-33" target="omU1pgqW6LJjpDUwzffS-63" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-33" value="<span style="font-size: 10px;">DubboConfigBeanInitializer#<br style="font-size: 10px;"></span><b style="font-size: 10px;">afterPropertiesSet()</b><br style="font-size: 10px;"><font color="#007fff" style="font-size: 10px;">Bean dubboConfigBeanInitializer 初始化阶段执行</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="840" y="2380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-35" value="ReferenceAnnotationBeanPostProcessor#<br>postProcessMergedBeanDefinition(...)" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="840" y="2200" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-40" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-37" target="omU1pgqW6LJjpDUwzffS-39" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-37" value="DubboConfigAliasPostProcessor#<br><b>postProcessBeanDefinitionRegistry</b>(...)<br><font color="#007fff">仅仅是在后置处理器内保存一下BeanDefinitionRegistry</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="840" y="1040" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-39" value="this.registry = registry;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1040" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-44" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-41" target="omU1pgqW6LJjpDUwzffS-43" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-41" value="DubboInfraBeanRegisterPostProcessor#<div><b>postProcessBeanDefinitionRegistry(...)</b></div><div><font style="" color="#007fff">仅仅是在后置处理器内保存一下BeanDefinitionRegistry</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="840" y="1120" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-43" value="<b>this.registry = registry;</b>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1120" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-49" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-45" target="omU1pgqW6LJjpDUwzffS-48" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-45" value="DubboInfraBeanRegisterPostProcessor<br>#<b>postProcessBeanFactory()</b><br><font style="font-size: 8px;" color="#007fff">前面DubboSpringInitializer注册了ReferenceAnnotationBeanPostProcessor的<b>Bean定义</b>,但是没有没有创建Bean,这里创建Bean并注册</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="840" y="1400" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-55" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-56" target="omU1pgqW6LJjpDUwzffS-54" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-48" value="referenceAnnotationBeanPostProcessor = beanFactory.<b>getBean</b>(...);<br>beanFactory.<b>addBeanPostProcessor</b>(<br>referenceAnnotationBeanPostProcessor);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1400" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-50" value="<span style="font-size: 10px;"><font color="#007fff">暂没用到这种方式,暂略</font></span>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1640" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-53" value="<font style="font-size: 10px;"><font style="font-size: 10px;" color="#ea6b66">执行BeanFactory后置处理的第一步就是读取BeanFactoryPostProcessor<br>Bean定义并创建Bean,看ServiceAnnotationPostProcessor、<br>DubboInfraBeanRegisterPostProcessor等后置处理器的Bean都创建完成了<br><span style="">为何唯独&nbsp;ReferenceAnnotationBeanPostProcessor</span><span style="">没有创建Bean,<br>以至于还要通过这种方式创建Bean并注册</span><br><span style="">TODO</span></font><br></font>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="470" y="1380" width="350" height="100" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-54" value="beanFactory.<b style="font-size: 10px;">registerSingleton</b>(<br style="font-size: 10px;">ConfigManager.BEAN_NAME, applicationModel<br style="font-size: 10px;">.<b style="font-size: 10px;">getApplicationConfigManager</b>());<br><font color="#007fff">注册dubboConfigManager</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1080" y="1560" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-57" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-48" target="omU1pgqW6LJjpDUwzffS-56" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1180" y="1460" as="sourcePoint" />
<mxPoint x="1180" y="1565" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-59" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-56" target="omU1pgqW6LJjpDUwzffS-58" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-56" value="获取ApplicationModel、ModuleModel Bean实例,然后获取<b>ExtensionInjector</b>并执行初始化,然后从Spring环境上文读取<b>Dubbo的配置属性,</b>写入ApplicationModel" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="1080" y="1480" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-58" value="ExtensionInjector&nbsp;<br>TODO" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1320" y="1480" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-60" value="<div style="font-size: 9px;"><b style="font-size: 9px;">读取的属性:</b></div><div style="font-size: 9px;"><font style="font-size: 9px;">"dubbo.application.name" -&gt; "dubbo-springboot-demo-provider"</font></div><div style="font-size: 9px;"><font style="font-size: 9px;">"dubbo.config.multiple" -&gt; "true"</font></div><div style="font-size: 9px;"><font style="font-size: 9px;">"dubbo.protocol.host" -&gt; "localhost"</font></div><div style="font-size: 9px;"><font style="font-size: 9px;">"dubbo.protocol.name" -&gt; "tri"</font></div><div style="font-size: 9px;"><font style="font-size: 9px;">"dubbo.protocol.port" -&gt; "50052"</font></div><div style="font-size: 9px;"><font style="font-size: 9px;">"dubbo.registry.address" -&gt; "nacos://127.0.0.1:8848"</font></div>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=9;fontColor=#007FFF;" parent="1" vertex="1">
<mxGeometry x="1286" y="1545" width="280" height="90" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-98" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-63" target="omU1pgqW6LJjpDUwzffS-97" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-100" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-63" target="omU1pgqW6LJjpDUwzffS-99" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-63" value="prepareDubboConfigBeans();<br><font color="#007fff">用于在@Reference Bean自动注入前初始化Dubbo一些配置Bean</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1080" y="2380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-66" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-19" target="omU1pgqW6LJjpDUwzffS-65" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1040" y="1770" as="sourcePoint" />
<mxPoint x="1180" y="1820" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-65" value="<font style="font-size: 10px;">首先从BeanDefinition或BeanFactory中获取Bean类型<br></font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1080" y="1740" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-67" value="<div style="font-size: 9px;">&nbsp;metadata = buildAnnotatedMetadata(clazz);<span style="background-color: initial; font-size: 9px;">&nbsp;<br style="font-size: 9px;">this.injectionMetadataCache.put(cacheKey, metadata);<br style="font-size: 9px;"><font color="#007fff" style="font-size: 9px;">查找类中@DubboReference @Reference注解的<b style="font-size: 9px;">字段</b>或<b style="font-size: 9px;">@Bean方法,</b><span style="font-size: 9px;">并缓存</span></font></span></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;" parent="1" vertex="1">
<mxGeometry x="1320" y="1820" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-72" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-70" target="omU1pgqW6LJjpDUwzffS-23" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-74" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-70" target="omU1pgqW6LJjpDUwzffS-73" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-70" value="prepareInjection(metadata);<br><font color="#007fff">解析上一步查找到的字段或@Bean方法,创建BeanDefinition并注册到Spring容器</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1080" y="1900" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-76" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-73" target="omU1pgqW6LJjpDUwzffS-75" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-78" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;fontSize=11;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-73" target="omU1pgqW6LJjpDUwzffS-77" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-73" value="<div>String referenceBeanName = <b>registerReferenceBean</b>(</div><div>fieldElement.getPropertyName(), injectedType, attributes, fieldElement.field);</div><div><font color="#007fff">比如Demo的Task</font></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1320" y="1900" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="-dgZXbgsa9ORmBTnPNrw-5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-75" target="-dgZXbgsa9ORmBTnPNrw-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-75" value="beanDefinitionRegistry.<b>registerBeanDefinition</b>(<br>referenceBeanName, beanDefinition);<br><b>referenceBeanManager</b><br>.<b>registerReferenceKeyAndBeanName</b>(<br>referenceKey, referenceBeanName);" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="1550" y="1900" width="220" height="60" as="geometry" />
</mxCell>
<mxCell id="-dgZXbgsa9ORmBTnPNrw-32" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-77" target="-dgZXbgsa9ORmBTnPNrw-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-77" value="<div style="font-size: 9px;">String referenceBeanName = <b style="font-size: 9px;">registerReferenceBean</b>(</div><div style="font-size: 9px;">methodElement.getPropertyName(), injectedType, attributes,methodElement.method);</div><div style="font-size: 9px;"><font color="#007fff" style="font-size: 9px;">比如Demo的Task中的 DemoService</font><br style="font-size: 9px;"></div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=9;align=center;" parent="1" vertex="1">
<mxGeometry x="1320" y="1980" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="-dgZXbgsa9ORmBTnPNrw-18" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="omU1pgqW6LJjpDUwzffS-88" target="-dgZXbgsa9ORmBTnPNrw-7" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1060" y="2310" />
<mxPoint x="1060" y="6340" />
<mxPoint x="580" y="6340" />
<mxPoint x="580" y="6635" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-88" value="ReferenceAnnotationBeanPostProcessor#<br><b>postProcessProperties</b>(...)<br><font color="#007fff">这里实现服务引用Bean的注入,后面详细解析</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="840" y="2280" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-108" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;endArrow=diamondThin;endFill=1;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-96" target="omU1pgqW6LJjpDUwzffS-106" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-96" value="<div style="text-align: center;"><b>DubboConfigBeanInitializer</b></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><font color="#007fff">//是否初始化Dubbo配置Bean</font></p><p style="margin: 0px 0px 0px 4px;">private final AtomicBoolean <b>initialized</b> = new AtomicBoolean(false);</p><p style="margin: 0px 0px 0px 4px;">private ConfigurableListableBeanFactory <b>beanFactory</b>;</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">//Reference Bean 容器</font></p><p style="margin: 0px 0px 0px 4px;">private ReferenceBeanManager&nbsp;<b>referenceBeanManager</b>;</p>&nbsp; <font color="#007fff">//此Bean在DubboInfraBeanRegisterPostProcessor中注册</font><br><p style="margin: 0px 0px 0px 4px;">@Autowired</p><p style="margin: 0px 0px 0px 4px;">private ConfigManager <b>configManager</b>;</p><p style="margin: 0px 0px 0px 4px;"><span style="background-color: initial;"><font color="#007fff">//此Bean在DubboSpringInitializer 初始化时注册</font></span><br></p><p style="margin: 0px 0px 0px 4px;">@Autowired</p><p style="margin: 0px 0px 0px 4px;">@Qualifier("org.apache.dubbo.rpc.model.ModuleModel")</p><p style="margin: 0px 0px 0px 4px;">private ModuleModel <b>moduleModel</b>;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-440" y="1700" width="400" height="220" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-97" value="referenceBeanManager<br>.prepareReferenceBeans();<br><font color="#007fff">用于初始化所有 reference Bean, 分析消费者时再细看</font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1080" y="2460" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-102" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-99" target="omU1pgqW6LJjpDUwzffS-101" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-105" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-99" target="omU1pgqW6LJjpDUwzffS-104" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-99" value="<div style="font-size: 8px;">loadConfigBeansOfType(<b>ApplicationConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>RegistryConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>ProtocolConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>MonitorConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>ConfigCenterBean</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>MetadataReportConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>MetricsConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>TracingConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>SslConfig</b>.class, configManager);</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>ModuleConfig</b>.class, moduleModel.getConfigManager());</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>ProviderConfig</b>.class, moduleModel.getConfigManager());</div><div style="font-size: 8px;">loadConfigBeansOfType(<b>ConsumerConfig</b>.class, moduleModel.getConfigManager());</div>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=8;align=left;arcSize=5;" parent="1" vertex="1">
<mxGeometry x="1320" y="2350" width="320" height="120" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-101" value="从 beanFactory 按类型获取所有beanName,<br>然后 beanFactory.getBean(beanName, configClass) 创建所有Bean,并注册到 <b>configManager</b>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1680" y="2380" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-103" value="<font color="#ea6b66">这一步创建Bean需要BeanDefinition,&nbsp;<br style="font-size: 10px;">BeanDefinition 哪里注册的?TODO<br>测试Demo中没有加载到任何一个配置Bean<br>先略<br></font>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="1886" y="2380" width="210" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-104" value="<font style="font-size: 9px;">List&lt;ConfigCenterBean&gt; configCenterBeans = configManager.loadConfigsOfTypeFromProps(<br>ConfigCenterBean.class);<br><font color="#007fff">加载配置中心配置Bean,暂略</font><br></font>" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;" parent="1" vertex="1">
<mxGeometry x="1380" y="2490" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-106" value="<div style="text-align: center;"><b>ReferenceBeanManager</b><br></div><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><font color="#007fff">Reference Bean实例的容器,也归Spring容器管理</font></p><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><font color="#007fff">由于BeanFactoryPostProcessor中需要,很早就创建了其Bean实例</font></p><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// reference key -&gt; reference bean names</font></p><p style="margin: 0px 0px 0px 4px;">private ConcurrentMap&lt;String, List&lt;String&gt;&gt; <b>referenceKeyMap</b> = new ConcurrentHashMap&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// reference alias -&gt; reference bean name</font></p><p style="margin: 0px 0px 0px 4px;">private ConcurrentMap&lt;String, String&gt; <b>referenceAliasMap</b> = new ConcurrentHashMap&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// reference bean name -&gt; ReferenceBean</font></p><p style="margin: 0px 0px 0px 4px;">private ConcurrentMap&lt;String, ReferenceBean&gt; <b>referenceBeanMap</b> = new ConcurrentHashMap&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;"><font color="#007fff">// reference key -&gt; ReferenceConfig instance</font></p><p style="margin: 0px 0px 0px 4px;">private ConcurrentMap&lt;String, ReferenceConfig&gt; <b>referenceConfigMap</b> = new ConcurrentHashMap&lt;&gt;();</p><p style="margin: 0px 0px 0px 4px;">private ApplicationContext <b>applicationContext</b>;</p><p style="margin: 0px 0px 0px 4px;">private volatile boolean <b>initialized</b> = false;</p><p style="margin: 0px 0px 0px 4px;">private ModuleModel <b>moduleModel</b>;</p><hr style="font-size: 10px;"><p style="margin: 0px 0px 0px 4px; font-size: 10px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=10;fontFamily=Helvetica;html=1;whiteSpace=wrap;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-960" y="1700" width="480" height="220" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-117" value="" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-111" target="omU1pgqW6LJjpDUwzffS-116" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-111" value="DubboConfigApplicationListener#<br>onApplicationEvent(<b>DubboConfigInitEvent</b> event)" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="600" y="2600" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="omU1pgqW6LJjpDUwzffS-187" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;rounded=1;" parent="1" source="omU1pgqW6LJjpDUwzffS-112" target="omU1pgqW6LJjpDUwzffS-116" edge="1">