为什么Spring父容器对SpringMVC子容器中的bean是不可见的..? 20C
为什么Spring父容器对SpringMVC子容器中的bean是不可见的,而子容器对父容器的中bean却是可见的?

文章截图来自:Spring-SpringMVC父子容器&AOP使用总结

图片说明

 如果是把Spring父容器与Spring MVC子容器比喻成平常的父类和子类,请说明为什么能比喻成父类和子类?
0

7个回答

就好比继承,子类继承父类,子类知道父类的属性、方法,可父类却不知道子类的方法是怎么玩的。。。

1
qq_35310633
StupidBoy__ 这个并不只是一两个的问题,比如拦截器实现的是Spring 的HandlerInterceptor 接口,还有的是直接拿来用。SpringMVC是Spring的一部分,它不用Spring父容器的,还让它属于Spring干嘛,如果不用的话,这个SpringMVC框架早就不用了
11 个月之前 回复
li_13579_li
li_13579_li 回复qq_35310633: 谢谢,你说的很好,请问Spring容器是哪个类,Spring MVC容器又是哪个类,平常的子类继承父类通过extends关键字来实现,那Spring父容器和Spring MVC子容器又是怎么来实现的呢?这貌似就是我这个问题的关键啊
11 个月之前 回复
qq_35310633
StupidBoy__ 回复li_13579_li: Spring框架包含很多Spring AOP、Spring ORM、Spring DAO、Spring Web、Spring Context、Spring Web MVC、Spring Core,每个都是Spring的一部分,相当于一个父类有多个子类,比喻成继承或者实现都可以。你可以这样想,既然这些容器都属于Spring框架,它肯定会继承或者实现Spring框架,不然弄这些框架做什么用。
11 个月之前 回复
li_13579_li
li_13579_li 如果把Spring父容器与Spring MVC子容器的关系比喻成继承的关系,的确是这样.但是为什么Spring父容器与Spring MVC子容器的关系能比喻成父类和子类的关系呢?为什么
12 个月之前 回复

因为springmvc是在spring的基础上加入了mvc的模式,所以可以认为是springmvc是spring的子类,springmvc继承了spring的特性又在基础上加入mvc,你就可以理解为一个是父类,一个是子类的关系

1

Spring框架包含很多Spring AOP、Spring ORM、Spring DAO、Spring Web、Spring Context、Spring Web MVC、Spring Core,每个都是Spring的一部分,相当于一个父类有多个子类,比喻成继承或者实现都可以。你可以这样想,既然这些容器都属于Spring框架,它肯定会继承或者实现Spring框架,不然弄这些框架做什么用。

1

我觉得吧,spring就是这么设计的,知道就行了,你没必要非得找个东西跟它类比,非要知道原由,简单打开api查下便知:
如果你查下api以XmlBeanFactory为例,他继承了HierarchicalBeanFactory接口,这个接口就时用来控制层次关系的,有个核心的方法:BeanFactory getParentBeanFactory();,通过这个方法,子容器就可以获取到父容器的bean,但这个接口没有获取子容器的方法。所以你应该明白,原因。

1
a970926205
请叫我亮闪闪 如果我没猜错的话 他应该还没有看源码,在凭空猜测内部原理
11 个月之前 回复

你问的这个问题实际上是继承的原理,子类会拥有父类的所有属性与方法,并且加上自己本身的属性与方法,但是父类却没有子类的属性与方法,java代码都是这样的,如果非要搞清楚原因的话,那就从java的设计原理上入手吧

1
hu_belif
hu_beliefs 回复li_13579_li: 很简单,因为spring是最早出现的,它可是父级框架,springmvc是后来通过对spring的优化改进后出现的,没有spring就没有springmvc
11 个月之前 回复
li_13579_li
li_13579_li 不是问继承的原理,只是问不明白为什么能把Spring容器与Spring MVC容器比喻成父类和子类的关系?
11 个月之前 回复

感觉你一直纠结于“为什么能把Spring容器与Spring MVC容器比喻成父类和子类的关系”,父类和子类之间的继承关系,初衷应该是代码(模块)重用,子类天然继承了父类的属性和功能,且加入自身特有的属性和功能。
SpringMVC不就是在Spring的基础上加入了MVC的属性和功能吗,这个是不是可以类比的呢?

1
li_13579_li
li_13579_li 谢谢,你说的很好,请问Spring容器是哪个类,Spring MVC容器又是哪个类,平常的子类继承父类通过extends关键字来实现,那Spring父容器和Spring MVC子容器又是怎么来实现的呢?这貌似就是我这个问题的关键啊
11 个月之前 回复

spring是市场上大多框架的核心粘合剂,更是许多框架的启蒙框架,是spring类框架下的父级框架,因此楼上的大神才这样子比喻,不过是为了你好理解些,真实的原理你必须自己看看源代码,
。推荐更多你去看看源代码,也多去了解一下spring的前世今生。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring容器中Bean的生命周期
一、Spring装配Bean的过程 实例化; 设置属性值; 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name; 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory; 如果实现ApplicationContextAware,调用setApplicationContext设置Applicat
在Spring容器中装配bean
Spring学习笔记
Bean在Spring容器中的生命周期
   Bean在Spring容器中的生命周期 配置在Spring中的Bean在Spring容器中从加载到销毁会经历那些过程呢?如果实现一些特定的Spring接口,这些特定接口的方法会在什么时候被调用呢?本文简单介绍一下这些过程. Bean在Spring容器中的生命周期如下图所示:   1,调用Bean的构造函数(或者工厂方法)实例化Bean.2,对Bean的成员变量赋值....
Spring容器中Bean的实例化
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。这也就使得我们在项目中不分逻辑、业务层次管理Bean都变得非常简单、方便、适用,那么Spring容器是怎么去实例化他所管理的Bean的呢:说明:本文以JavaWeb环境为例,所用的Spring上下文均为ClassPathXmlApplicati
Spring 容器中 Bean 的生命周期
Spring 可以管理 singleton 作用域的 Bean 的生命周期,Spring 可以精确的知道该 Bean 何时被创建、何时被初始化完成、容器何时准备销毁该 Bean 实例。Spring 无法管理 prototype 作用域的 Bean 。1、Spring 管理 Bean 的生命周期行为的时机:① 注入依赖关系之后 ② 即将销毁 Bean 之前2、依赖关系注入之后的行为 Spring
获取spring容器中的bean
https://blog.csdn.net/zsg88/article/details/63288632
如何获取springmvc容器中的bean
public class WebContainerListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { System.out.println(“contextInitialized…”); //把一些固定不变的一些信息查询出...
springMVC子容器使用spring父容器配置文件资源
知识点: 1.子容器可以访问父容器的资源bean,父容器不可以访问子容器资源bean 2.spring配置读取配置文件属性例如jdbc.properties,父容器中可以使用@value("${key}") 对properties中的key获取其value值赋值给成员变量 @value注解 是在所有bean创建成功之后才执行,且只能在当前容器的查找数据
记录一次Spring父容器与SpringMVC子容器学习遇到的异常
Spring父容器: web.xml初始化:<!-- 启动spring --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext*.xml</param-v...
spring学习之---容器中Bean的生命周期
spring可以管理singleton作用域的Bean的生命周期,spring可以精确地知道该Bean何时被创建、何时被初始化完成、容器何时准备销毁该Bean实例。 对于prototype作用域的Bean,spring容器仅仅负责创建,当容器创建了Bean实例之后,Bean实例完全交给客户端代码管理,容器不再跟踪其生命周期,spring无法管理prototype作用域的Bean。1.依赖关系注入之
Spring(15) 容器中的工厂bean
前面两个涉及到使用工厂模式创建bean例子都是在bean的实现类中构造工厂模式,spring只是负责调用工厂方法来创建bean实例而已。 实际上spring还支持通过实现beanFactory接口来实现工厂模式。大致上可以这么理解,当一个bean对应的实现类时实现了beanFactory的类的时候,spring通过getBean返回的不是这个实现类本身,而是它里边一个叫做getObject()方...
Spring 的 IOC 容器中 Bean 的生命周期
1. 项目结构 2. 持久化类和配置Bean Phone.java public class Phone { private String brand; public Phone(){ System.out.println("Car`s Constructor....."); } public void setBrand(String brand) { t
Spring IOC 容器中bean的生命周期
Spring IOC 容器可以管理bean的生命周期,spring允许在bean生命周期内对其执行特定的任务。 spring IOC 容器对bean的生命周期进行管理过程 1 通过构造器或者工厂方法创建bean实例 2 为bean的属性设置值或者引用其他bean实例 3 执行 bena初始化方法 4 使用bean 实例 5 关闭容器时候,执行bean销毁方法 废话不多说上代码: User实体类 ...
从spring容器中获取bean
从sping容器中获取javabean
Spring IOC容器中Bean的生命周期
    SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务。 Spring IOC容器对Bean的生命周期进行管理的过程: 通过构造器或工厂方法创建Bean的实例 为Bean的属性设置值和对其他Bean的引用 调用Bean的初始化方法(也就是配置文件的method-init属性) 使用bean,执...
获取当前Spring容器中的bean
[code="java"] WebApplicationContext applicationContext = WebApplicationContextUtils .getWebApplicationContext(request.getSession() .getServletContext()); PersonService personServic...
获取Spring容器中Bean的工具类
获取Spring容器中Bean的工具类 package 包路径; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware;
spring手动获取容器中的bean
只需要定义一个bean,这个bean继承ApplicationContextAware如下:public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext = null; /** ...
在Spring IOC容器中配置Bean
在Spring IOC容器中配置Bean 在XML文件中通过Bean节点来配置bean
spring容器中bean的作用域bean的后处理器
容器bean中的作用域 applicationcontext.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.s
Spring工具类,获取Spring容器中的Bean
package com.ls.util;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * Spring工
【Bug】Spring 父容器不能访问子容器
先来看一段配置 web.xml &amp;lt;context-param&amp;gt; &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt; &amp;lt;param-value&amp;gt;classpath*:spring/applicationContext.xml&amp;lt;/param-value&amp;gt; &amp;lt;/context...
RecyclerView子View宽度不充满父容器
今天用RecyclerView写了简单的例子,使用的是LinearLyaoutManager,子View采用的TextView,准备写个简单的List展示,我的RecyclerView和TextView的宽度布局都采用的是match_parent,结果显示出来之后发现子View的宽度压根就没有充满屏幕。之前也用过RecyclerView,但是没有遇到过这个问题,很不解啊~~~网上查阅之后说是在Ad
控件为什么不可见
vs2005中创建网站:rn 在default.aspx中,从“工具箱”的“标准”组中将“Button”控件拖到设计页上,rn 再从“工具箱”的“HTML”组中将“Input (Submit)”控件拖到设计页上,rn按Ctrl + F5 ,运行正常。rn  但将网站目录中所有的文件发布到本地的c:\Inetpub\wwwrooot目录下,rn再从浏览器地址栏中打入:http://127.0.0.1/default.aspx,rn 问题出现了:“工具箱”的“标准”组拖入设计页的控件为什么不可见?rn         “工具箱”的“HTML”组中拖入设计页的控件是正常的。
为什么表不可见?
在自建的表空间AMILDB里建了若干个表,使用软件TOAD(青蛙)软件查看表时,建立的这些表都不可见,但是使用SQL命令却可以查询到他们.E.G: select * from t_a001,这样可以看到t_a001表里的所有记录.这是什么原因?请各位大侠指点.
为什么JdbTable不可见?
我把一个JdbTable放在一个TableScrollPane上,想JdbTable数据超过一页时可以通过滚动条翻页,在设计期间可以看到数据显示在JdbTable中,一切正常,运行时却看不到JdbTable,但这时其他数据控件正常,证明数据库确实打开了,如果我单纯用JdbTable,可以显示数据,却没法翻页,放在TableScrollPane上就只能在设计时看到JdbTable,到底为什么会这样?
Spring—IOC容器中Bean的生命周期方法
1. IOC容器中Bean的生命周期方法 Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的服务 具体管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的引用 调用Bean的初始化方法 开始使用Bean 当容器关闭时,调用Bean的销毁方法 在Bean的声明里设置init-method和...
Spring线程获取容器中bean的方法
在service处理中,需要创建一个线程来完成后续工作,并且该线程需要传参,service在用taskExecutor创建线程后即可返回。 这种解决方案是否合理,或者有没有更优雅的办法完成这种主线程返回,把剩余任务交给其他线程的需求,欢迎大家指教。 而针对我采用的实现方式,因为线程类是new出来的,不是之前在spring配置文件中作为bean定义好的(因为不知道spring bean的方式怎么
spring 8 bean配置--IOC容器中bean的生命周期
spring允许在bean生命周期的特定点执行定制的任务。 springIOC容器对bean生命周期进行管理的过程:  1 创建bean实例  2 为bean属性设置值,对其他bean引用  3 调用bean的初始化方法  4 bean使用  5 关闭容器,调用bean的销毁方法 在bean的声明你设置init-method 和 destroy-method属性,为bean指定初始化
可以随时拿取spring容器中Bean的工具类
在Spring帮我们管理bean后,编写一些工具类的时候需要从容器中拿到一些对象来做一些操作,比如字典缓存工具类,在没有找到字典缓存时,需要dao对象从数据库load一次,再次存入缓存中。此时需要在util工具类中拿到ioc容器中的dao对象。
普通类获取Spring容器中的Bean
普通类获取Spring容器中的Bean 方式一 @Component public class SpringApplicationContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setA...
Spring 5-从容器中取得bean
三、从容器中取得bean 1、前面体会到了一点,那就是解析bean的职责分工;在这里,这个特点又有充分的体现; 2、如何取得bean? 当应用程序通过beanFactory.getBean(&quot;simpleBean&quot;)从容器中取得bean实例时,处理该请求的是AbstractBeanFactory中的以下方法: protected Object doGetBean( ...
Spring学习(二)---在IoC容器中装配Bean
一 Spring配置概述 1.Spring容器高层视图 要使应用程序中的Spring容器成功启动,需要以下三方面的条件都具备: [list] [*]Spring框架的雷暴都已经放到应用程序的类路径下; [*]应用程序为Spring提供完备的Bean配置信息; [*]Bean的类都已经放在应用程序的类路径下。 [/list] [img]http://dl2.iteye.com...
SpringBoot 之 普通类获取Spring容器中的bean
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用spring提供的其他对象或者说有一些不需要交给spring管理,但是需要用到spring里的一些对象。如果这是spring框架的独立应用程序,我们通过ApplicationContext ac =
在filter中获取spring容器中的bean对象
在工作中的项目需要,要在filter中使用服务接口,但是采用传统的new 和注入方式都是空指针异常,最后的解决方式是 @Override public void init(FilterConfig config) throws ServletException { ServletContext context = config.getServletContext();
Spring 学习第十天: IOC容器中Bean的生命周期
Spring 容器中bean的生命周期 Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进行管理的过程: - 通过构造器或工厂方法创建 Bean 实例 - 为 Bean 的属性设置值和对其他 Bean 的引用 - 调用 Bean 的初始化方法 - Bean 可
SSH笔记-Spring的IOC容器中 Bean 的生命周期
1、Spring IOC 容器对 Bean 的生命周期进行管理的过程: ①通过构造器或工厂方法创建 Bean 实例 ②为 Bean 的属性设置值和对其他 Bean 的引用 ③调用 Bean 的初始化方法 ④使用Bean ⑤当容器关闭时, 调用 Bean 的销毁方法 2、实现指定初始方法和销毁方法的两种方法: ①在 Bean 的声明里设置 init-method 和 destroy-m...
Spring基础——在 IOC 容器中 Bean 之间的关系
一、在 Spring IOC 容器中 Bean 之间存在继承和依赖关系。 需要注意的是,这个继承和依赖指的是 bean 的配置之间的关系,而不是指实际意义上类与类之间的继承与依赖,它们不是一个概念。 二、Bean 之间的继承关系。 1.被继承的 ban 称为父 bean,继承这个父 bean 的 bean 称为子 bean。父 bean 可以通过指定 abstract 属性来声明为抽象的,子...
如何从当前spring容器中获得bean?
在用spring做一个web项目,有一个需求是在没有servletContext的情况下,根据beanId获得当前容器中的具体bean对象。请问如何实现?注意,这个beanId可能是外部系统传过来的,所以无法用@autowire提前注入。rn发现rn[code="java"]WebApplicationContext wac = ContextLoader.getCurrentWebApplicationCon;[/code]rn但这个方法只能获得web容器,我想做的是获得当前的spring root container即无论当前是通过web还是非web加载的bean都能让我获得到。rnrn如果不是web项目可以直接rnrnClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();rnrn然后我每次都是中这个context去取bean,但如果是web项目,该怎么做呢?
spring中IOC容器中Bean的生命周期方法
spring IOC容器可以管理Bean的生命周期,spring允许在Bean生命周期的特定点执行定制的任务 spring IOC容器对Bean的生命周期管理的过程 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其他Bean的引用 调用Bean的初始化方法 Bean可以使用了 当容器关闭是,调用Bean的销毁方法 在Bean的声明里设置init-me...