我正在阅读spring doc核心容器我希望了解 ref parent 的目的,当注入协作者然后我发现这个概念是父上下文子上下文或父容器和当前容器这是部分我很困惑: This part of doc
通过parent属性指定目标bean会创建一个 引用当前父容器中的bean 容器。 parent属性的值可以与其中任何一个相同 目标bean的id属性,或名称中的一个值 目标bean的属性,目标bean必须在父级中 当前的容器。您使用此bean引用变体 主要是当你有一个容器的层次结构,你想要包装一个 父容器中的现有bean,其代理将具有 与父bean相同的名称。
<!-- in the parent context -->
<bean id="accountService" class="com.foo.SimpleAccountService">
<!-- insert dependencies as required as here -->
</bean>
<!-- in the child (descendant) context -->
<bean id="accountService" <!-- bean name is the same as the parent bean -->
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref parent="accountService"/> <!-- notice how we refer to the parent bean -->
</property>
<!-- insert other configuration and dependencies as required here -->
</bean>
有人可以给我一些帮助或这两种情境的例子吗? ref父母的目的是什么提前谢谢
答案 0 :(得分:5)
Spring的bean在应用程序上下文中运行。
应用程序上下文是Spring的高级容器。相近 BeanFactory,它可以加载bean定义,将bean连接在一起,以及 根据要求分配豆类。此外,它增加了更多 特定于企业的功能,例如解析的能力 来自属性文件的文本消息和发布的能力 应用程序事件到感兴趣的事件监听器这个容器是 由org.springframework.context.ApplicationContext接口定义。 https://www.tutorialspoint.com/spring/spring_applicationcontext_container.htm
对于每个应用程序上下文,您可以拥有许多配置文件,配置类或两者的混合。
您可以使用以下代码创建应用程序上下文:
ApplicationContext context = new FileSystemXmlApplicationContext("Beans.xml");
使用context.getBean
或@autowired
获取bean。
在某些情况下,您希望(或需要)拥有上下文层次结构。在这些情况下,Spring提供了一种指定父上下文的方法。如果你看一下这个构造函数,你会看到它接收一个上下文的父。
如您所见,父上下文与子上下文的类型相同,它们都是http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html。
不同之处在于它们通过父/子关系相关。不是撰写(导入)关系。
最常见的情况是你在Spring MVC应用程序中看到这个,这个应用程序有2个上下文,第一个是调度程序servlet上下文,另一个是根上下文。 在这里你可以看到这种关系 http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-servlet
在这里,您可以看到Spring启动应用程序中的应用程序上下文层次结构示例。
https://dzone.com/articles/spring-boot-and-application-context-hierarchy