Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
Spring_resource_analysis
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
WeifengSun
Spring_resource_analysis
Commits
04177ba3
Commit
04177ba3
authored
Aug 17, 2022
by
SunWei峰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Spring上下文
parent
307c9ae2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
15 additions
and
6 deletions
+15
-6
spring-framework-main/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java
+0
-0
spring-framework-main/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java
+15
-6
No files found.
spring-framework-main/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java
View file @
04177ba3
This diff is collapsed.
Click to expand it.
spring-framework-main/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java
View file @
04177ba3
...
@@ -175,7 +175,7 @@ final class PostProcessorRegistrationDelegate {
...
@@ -175,7 +175,7 @@ final class PostProcessorRegistrationDelegate {
// Now, invoke the postProcessBeanFactory callback of all processors handled so far.
// Now, invoke the postProcessBeanFactory callback of all processors handled so far.
// 6.调用所有 BeanDefinitionRegistryPostProcessor 的 postProcessBeanFactory 方法
// 6.调用所有 BeanDefinitionRegistryPostProcessor 的 postProcessBeanFactory 方法
// (BeanDefinitionRegistryPostProcessor
继承自
BeanFactoryPostProcessor)
// (BeanDefinitionRegistryPostProcessor
继承自
BeanFactoryPostProcessor)
invokeBeanFactoryPostProcessors
(
registryProcessors
,
beanFactory
);
invokeBeanFactoryPostProcessors
(
registryProcessors
,
beanFactory
);
// 7.最后, 调用入参 beanFactoryPostProcessors 中的普通 BeanFactoryPostProcessor 的 postProcessBeanFactory 方法
// 7.最后, 调用入参 beanFactoryPostProcessors 中的普通 BeanFactoryPostProcessor 的 postProcessBeanFactory 方法
invokeBeanFactoryPostProcessors
(
regularPostProcessors
,
beanFactory
);
invokeBeanFactoryPostProcessors
(
regularPostProcessors
,
beanFactory
);
...
@@ -263,20 +263,27 @@ final class PostProcessorRegistrationDelegate {
...
@@ -263,20 +263,27 @@ final class PostProcessorRegistrationDelegate {
// to ensure that your proposal does not result in a breaking change:
// to ensure that your proposal does not result in a breaking change:
// https://github.com/spring-projects/spring-framework/issues?q=PostProcessorRegistrationDelegate+is%3Aclosed+label%3A%22status%3A+declined%22
// https://github.com/spring-projects/spring-framework/issues?q=PostProcessorRegistrationDelegate+is%3Aclosed+label%3A%22status%3A+declined%22
// 1.找出所有实现BeanPostProcessor接口的类
String
[]
postProcessorNames
=
beanFactory
.
getBeanNamesForType
(
BeanPostProcessor
.
class
,
true
,
false
);
String
[]
postProcessorNames
=
beanFactory
.
getBeanNamesForType
(
BeanPostProcessor
.
class
,
true
,
false
);
// Register BeanPostProcessorChecker that logs an info message when
// BeanPostProcessorChecker 是一个普通的信息打印,可能会有些情况,
// a bean is created during BeanPostProcessor instantiation, i.e. when
// 当Spring中的后置处理器还没有被注册就已经开始了bean的初始化时,
// a bean is not eligible for getting processed by all BeanPostProcessors.
// 便会打印 BeanPostProcessorChecker 中的信息
// BeanPostProcessor的目标计数
int
beanProcessorTargetCount
=
beanFactory
.
getBeanPostProcessorCount
()
+
1
+
postProcessorNames
.
length
;
int
beanProcessorTargetCount
=
beanFactory
.
getBeanPostProcessorCount
()
+
1
+
postProcessorNames
.
length
;
// 2.添加BeanPostProcessorChecker(主要用于记录信息)到beanFactory中
beanFactory
.
addBeanPostProcessor
(
new
BeanPostProcessorChecker
(
beanFactory
,
beanProcessorTargetCount
));
beanFactory
.
addBeanPostProcessor
(
new
BeanPostProcessorChecker
(
beanFactory
,
beanProcessorTargetCount
));
// Separate between BeanPostProcessors that implement PriorityOrdered,
// 3.定义不同的变量用于区分:
// Ordered, and the rest.
// 实现PriorityOrdered接口的BeanPostProcessor、实现Ordered接口的BeanPostProcessor、普通BeanPostProcessor
// 第一个是对象链表,第二三个是 beanName链表
// 用于存放实现PriorityOrdered接口的BeanPostProcessor
List
<
BeanPostProcessor
>
priorityOrderedPostProcessors
=
new
ArrayList
<>();
List
<
BeanPostProcessor
>
priorityOrderedPostProcessors
=
new
ArrayList
<>();
// 用于存放Spring内部的BeanPostProcessor
List
<
BeanPostProcessor
>
internalPostProcessors
=
new
ArrayList
<>();
List
<
BeanPostProcessor
>
internalPostProcessors
=
new
ArrayList
<>();
List
<
String
>
orderedPostProcessorNames
=
new
ArrayList
<>();
List
<
String
>
orderedPostProcessorNames
=
new
ArrayList
<>();
List
<
String
>
nonOrderedPostProcessorNames
=
new
ArrayList
<>();
List
<
String
>
nonOrderedPostProcessorNames
=
new
ArrayList
<>();
// 4.遍历 postProcessorNames, 将 BeanPostProcessors分开
for
(
String
ppName
:
postProcessorNames
)
{
for
(
String
ppName
:
postProcessorNames
)
{
if
(
beanFactory
.
isTypeMatch
(
ppName
,
PriorityOrdered
.
class
))
{
if
(
beanFactory
.
isTypeMatch
(
ppName
,
PriorityOrdered
.
class
))
{
BeanPostProcessor
pp
=
beanFactory
.
getBean
(
ppName
,
BeanPostProcessor
.
class
);
BeanPostProcessor
pp
=
beanFactory
.
getBean
(
ppName
,
BeanPostProcessor
.
class
);
...
@@ -321,11 +328,13 @@ final class PostProcessorRegistrationDelegate {
...
@@ -321,11 +328,13 @@ final class PostProcessorRegistrationDelegate {
registerBeanPostProcessors
(
beanFactory
,
nonOrderedPostProcessors
);
registerBeanPostProcessors
(
beanFactory
,
nonOrderedPostProcessors
);
// Finally, re-register all internal BeanPostProcessors.
// Finally, re-register all internal BeanPostProcessors.
// 重新注册内部PostProcessors,(相当于内部的BeanPostProcessor会被移到处理器链的末尾)
sortPostProcessors
(
internalPostProcessors
,
beanFactory
);
sortPostProcessors
(
internalPostProcessors
,
beanFactory
);
registerBeanPostProcessors
(
beanFactory
,
internalPostProcessors
);
registerBeanPostProcessors
(
beanFactory
,
internalPostProcessors
);
// Re-register post-processor for detecting inner beans as ApplicationListeners,
// Re-register post-processor for detecting inner beans as ApplicationListeners,
// moving it to the end of the processor chain (for picking up proxies etc).
// moving it to the end of the processor chain (for picking up proxies etc).
// 重新注册 ApplicationListenerDetector(跟上面类似,主要是为了移动到处理器链的末尾)
beanFactory
.
addBeanPostProcessor
(
new
ApplicationListenerDetector
(
applicationContext
));
beanFactory
.
addBeanPostProcessor
(
new
ApplicationListenerDetector
(
applicationContext
));
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment