From 4e447e81ebb215fdf2489159c94494df9d2e3b0b Mon Sep 17 00:00:00 2001 From: Scott Date: Tue, 11 May 2021 13:06:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(comment):=20=E6=B7=BB=E5=8A=A0=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E5=8C=96=E7=88=B6=E7=B1=BB=E5=B1=9E=E6=80=A7=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/AbstractApplicationContext.java | 3 ++ ...AbstractRefreshableApplicationContext.java | 1 + ...ctRefreshableConfigApplicationContext.java | 1 + .../AbstractXmlApplicationContext.java | 1 + .../ClassPathXmlApplicationContext.java | 2 +- .../com/czf/entity/ClassProcessorDemo.java | 50 +++++++++++++++++++ .../src/main/java/com/czf/loop/LoopA.java | 19 +++++++ .../java/com/czf/loop/LoopApplication.java | 20 ++++++++ .../src/main/java/com/czf/loop/LoopB.java | 17 +++++++ .../src/main/resources/application-loop.xml | 11 ++++ 10 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 spring-demo/src/main/java/com/czf/entity/ClassProcessorDemo.java create mode 100644 spring-demo/src/main/java/com/czf/loop/LoopA.java create mode 100644 spring-demo/src/main/java/com/czf/loop/LoopApplication.java create mode 100644 spring-demo/src/main/java/com/czf/loop/LoopB.java create mode 100644 spring-demo/src/main/resources/application-loop.xml diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index 595ba3d..df733ef 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -226,6 +226,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader * Create a new AbstractApplicationContext with no parent. */ public AbstractApplicationContext() { + // 设置资源解析器,默认实现为 PathMatchingResourcePatternResolver this.resourcePatternResolver = getResourcePatternResolver(); } @@ -234,7 +235,9 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader * @param parent the parent context */ public AbstractApplicationContext(@Nullable ApplicationContext parent) { + // 设置资源解析器 this(); + // 设置此应用程序上下文的父级。如果父级非null且其环境是ConfigurableEnvironment的实例,则将父级环境与此(子级)应用程序上下文环境合 setParent(parent); } diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableApplicationContext.java index 9c87844..0d68549 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableApplicationContext.java @@ -86,6 +86,7 @@ public abstract class AbstractRefreshableApplicationContext extends AbstractAppl * @param parent the parent context */ public AbstractRefreshableApplicationContext(@Nullable ApplicationContext parent) { + // 初始化AbstractApplicationContext属性值,设置资源解析器,设置此应用程序上下文的父级 super(parent); } diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java index 901e715..35d2cfc 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java @@ -56,6 +56,7 @@ public abstract class AbstractRefreshableConfigApplicationContext extends Abstra * @param parent the parent context */ public AbstractRefreshableConfigApplicationContext(@Nullable ApplicationContext parent) { + // 初始化AbstractRefreshableApplicationContext属性值,以及调用其父类的构造方法 super(parent); } diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractXmlApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractXmlApplicationContext.java index 85cb225..8136390 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractXmlApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractXmlApplicationContext.java @@ -59,6 +59,7 @@ public abstract class AbstractXmlApplicationContext extends AbstractRefreshableC * @param parent the parent context */ public AbstractXmlApplicationContext(@Nullable ApplicationContext parent) { + // 初始化 AbstractRefreshableConfigApplicationContext 属性值以及调用其父类构造方法 super(parent); } diff --git a/spring-context/src/main/java/org/springframework/context/support/ClassPathXmlApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/ClassPathXmlApplicationContext.java index 9b72875..ca98496 100644 --- a/spring-context/src/main/java/org/springframework/context/support/ClassPathXmlApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/ClassPathXmlApplicationContext.java @@ -137,7 +137,7 @@ public class ClassPathXmlApplicationContext extends AbstractXmlApplicationContex public ClassPathXmlApplicationContext( String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws BeansException { - + // 初始化父类属性值以及设置资源解析器 super(parent); setConfigLocations(configLocations); if (refresh) { diff --git a/spring-demo/src/main/java/com/czf/entity/ClassProcessorDemo.java b/spring-demo/src/main/java/com/czf/entity/ClassProcessorDemo.java new file mode 100644 index 0000000..c1c1759 --- /dev/null +++ b/spring-demo/src/main/java/com/czf/entity/ClassProcessorDemo.java @@ -0,0 +1,50 @@ +package com.czf.entity; + +/** + * @author Scott + * @date 2021/5/6 下午4:31 + */ +class SuperClass { + String name; + static { + System.out.println("父类静态代码块"); + } + + public SuperClass() { + System.out.println("父类无参构造方法执行"); + } + + public SuperClass(String name) { + this.name = name; + System.out.println("父类有参构造方法执行"); + } + +} + +class SubClass extends SuperClass { + + String name; + + static { + System.out.println("子类静态代码块"); + } + + public SubClass() { + System.out.println("子类无参构造方法执行"); + } + + public SubClass(String name) { + this.name = name; + System.out.println("子类有参构造方法执行"); + } +} +public class ClassProcessorDemo { + + public static void main(String[] args) { + + SubClass subClass = new SubClass("小名"); + System.out.println(subClass.name); + SuperClass superClass = subClass; + System.out.println(superClass.name); + } +} diff --git a/spring-demo/src/main/java/com/czf/loop/LoopA.java b/spring-demo/src/main/java/com/czf/loop/LoopA.java new file mode 100644 index 0000000..4ab9820 --- /dev/null +++ b/spring-demo/src/main/java/com/czf/loop/LoopA.java @@ -0,0 +1,19 @@ +package com.czf.loop; + +/** + * 测试循环依赖 + * @author Scott + * @date 2021/5/7 上午8:54 + */ +public class LoopA { + + private LoopB loopB; + + public LoopB getLoopB() { + return loopB; + } + + public void setLoopB(LoopB loopB) { + this.loopB = loopB; + } +} diff --git a/spring-demo/src/main/java/com/czf/loop/LoopApplication.java b/spring-demo/src/main/java/com/czf/loop/LoopApplication.java new file mode 100644 index 0000000..f1b312c --- /dev/null +++ b/spring-demo/src/main/java/com/czf/loop/LoopApplication.java @@ -0,0 +1,20 @@ +package com.czf.loop; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * 循环依赖 + * + * @author Scott + * @date 2021/5/7 上午8:55 + */ +public class LoopApplication { + + public static void main(String[] args) { + + ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-loop.xml"); + LoopA loopA = applicationContext.getBean(LoopA.class); + LoopB loopB = applicationContext.getBean(LoopB.class); + + } +} diff --git a/spring-demo/src/main/java/com/czf/loop/LoopB.java b/spring-demo/src/main/java/com/czf/loop/LoopB.java new file mode 100644 index 0000000..e56a099 --- /dev/null +++ b/spring-demo/src/main/java/com/czf/loop/LoopB.java @@ -0,0 +1,17 @@ +package com.czf.loop; + +/** + * @author Scott + * @date 2021/5/7 上午8:55 + */ +public class LoopB { + private LoopA loopA; + + public LoopA getLoopA() { + return loopA; + } + + public void setLoopA(LoopA loopA) { + this.loopA = loopA; + } +} diff --git a/spring-demo/src/main/resources/application-loop.xml b/spring-demo/src/main/resources/application-loop.xml new file mode 100644 index 0000000..ed29274 --- /dev/null +++ b/spring-demo/src/main/resources/application-loop.xml @@ -0,0 +1,11 @@ + + + + + + + + + -- Gitee