Closed githubyangxd closed 5 years ago
另:sofaboot不是采用上下文隔离的么,各个模块各自所引入的依赖或bean可以被自己所使用,模块间不会冲突,所以更想知道这个 Root Application Context是如何体现、如何使用的。
sofa-boot-master 工程? 你是指 sofaboot master 分支还是指什么? 麻烦核实下问题吧。
sofa-boot-master 工程? 你是指 sofaboot master 分支还是指什么? 麻烦核实下问题吧。
是的 master分支,后续文档中介绍了,应该是用spring-parent引入的那个模块上下文就是Root Application Context。
使用模块隔离之后,会有一个 Root Application Context,默认情况下, 它是所有 SOFA 模块的父上下文。假如有两个 SOFA 模块,A 和 B。那么运行时将有三个上下文:
如果需要打通 A 和 B上下文,则使用 spring-parent 指定 A-Context 为 B-Context 的父上下文 (这么做的目的通常是为了能够在 B 中直接使用 @Autowire 等注解直接引用 A 模块定义的 Bean),此时上下文关系是:
使用模块隔离之后,会有一个 Root Application Context,默认情况下, 它是所有 SOFA 模块的父上下文。假如有两个 SOFA 模块,A 和 B。那么运行时将有三个上下文:
- Root-Context
- A-Context (父上下文为 Root-Context)
- B-Context (父上下文为 Root-Context)
如果需要打通 A 和 B上下文,则使用 spring-parent 指定 A-Context 为 B-Context 的父上下文 (这么做的目的通常是为了能够在 B 中直接使用 @autowire 等注解直接引用 A 模块定义的 Bean),此时上下文关系是:
- Root-Context
- A-Context (父上下文为 Root-Context)
- B-Context(父上下文为 A-Context)
我理解你这个意思,但是Root-context里有什么明确的实际意义吗,我看就是说放一些公用的bean之类的,另外文档里有这么一句话: Root Application Context,它是每个 SOFABoot 模块创建的 Spring Context 的 Parent。这样设计的目的是为了保证每个 SOFABoot 模块的 Spring Context 都能发现 Root Application Context 中创建的 Bean,这样当应用新增 Starter 时,不仅 Root Application Context 能够使用 Starter 中新增的 Bean,每个 SOFABoot 模块的 Spring Context 也能使用这些 Bean。
当应用新增Starter是什么意思呢,是说应用引入了新的starter依赖的意思吗,可是这样是说不通的。如果是引入了新的starter,那么starter也应该算一个独立module,其内部的context也是独立的,其parent不是也是root context吗,这样一来,root context怎么会能用到starter中的bean呢,应该是反过来才对。不是很理解,求解答一些谢谢
在sofa-boot-master工程中,如何使用Root Application Context? 我猜测是不是有一个类似于父类sofaboot模块,比如sofa-boot-master也是一个模块,然后其他模块在sofa-module.properties文件中Spring-Parent引入? 如果是这样的话,那么是不是说明在sofa-boot-master工程中没有Root Application Context存在? 如果有的话,能麻烦哪位老师帮解答下用法么?谢谢