• 风轻扬
    2023-04-03 来自北京
    思考题:Spring中有父子容器的概念。子容器:MVC容器,父容器:Spring容器。子可以访问父,反过来不行,这是由Spring的体系结构决定的,子容器继承父容器,所以子容器是知道父容器的,所以也就能得到父容器的引用,进而得到父容器中的bean。但是父容器是无法知道子容器的,所以也就无法直接获取子容器中的bean,但是可以通过getBeanFactory来得到子容器,从而获取到子容器中的bean,但java的三层模型,controller--->service--->dao,controller注入service对象是正常的,service注入controller有点奇怪,一般不这么干。不知道以上理解的对不对

    作者回复: 很对。

    
    5
  • 睿智的仓鼠
    2023-03-29 来自湖北
    文中代码实现了webApplicationContext的注入,但排版缺少了很重要的 populateBean()方法,没有使用到初始化好的ioc容器,github中相关的完整的代码是: ```java DispatcherServlet: protected void initController() { this.controllerNames = scanPackages(this.packageNames); for (String controllerName : this.controllerNames) { Object obj = null; Class<?> clz = null; try { clz = Class.forName(controllerName); obj = clz.newInstance(); } catch (Exception e) { e.printStackTrace(); } this.controllerClasses.put(controllerName, clz); populateBean(obj); this.controllerObjs.put(controllerName, obj); } } // 处理controller中的@Autowired注解 private void populateBean(Object bean) { Class<?> clz = bean.getClass(); Field[] fields = clz.getDeclaredFields(); for (Field field : fields) { boolean isAutowired = field.isAnnotationPresent(Autowired.class); if (isAutowired) { String fieldName = field.getName(); Object autowiredBean = this.webApplicationContext.getBean(fieldName); field.setAccessible(true); try { field.set(bean, autowiredBean); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } } ```
    展开

    作者回复: 感谢感谢。

    
    3
  • 不是早晨,就是黄昏
    2023-04-04 来自河南
    最后,在 com.minis.test.HelloworldBean 内的测试方法上 但是你项目代码里有新建了一个test目录,且是和minis同级,而minisMVC-servlet.xml里配置的也是com.test,文章给的代码也是com.test里的,感觉写的有点过于随意了。。。。

    作者回复: 多谢指正。

    
    1
  • Cooler
    2023-06-16 来自上海
    老师,目前wac.setServletContext(servletContext); 这一块相关代码是不是没有用在这一章讲的内容

    作者回复: 用到了

    
    
  • 啊良梓是我
    2023-05-18 来自广东
    课后题,通过WebApplicationContext 可以访问到DispatcherServlet里面的bean吗? 我觉得是分成两种情况来讲的? 根据Servlet的时序来讲的话,那么当初始化好WebApplicationContext的时候,DispatcherServlet还没有进行初始化,所以是空的无法访问的; 但是Servlet初始化完成后呢那应该是可以的?但是怎么访问?用一个方法? 这个方法怎么表明他是IOC的bean的?有点乱了

    作者回复: 你往后面看再回首的时候,有这一部分的解释。

    
    
  • 啊良梓是我
    2023-05-18 来自广东
    黑夜模式,代码里面的标签全没了,作者可以跟后台反馈一下吗 改一下颜色啥的

    作者回复: 好的

    
    
  • Geek_b71d2c
    2023-05-06 来自北京
    老师,请问一下servletContext.getInitParameter(CONFIG_LOCATION_PARAM)一直获取到的是空,这是什么原因呀

    作者回复: web.xml文件中的初始化参数没给吧?参考Github上的

    
    
  • 杨松
    2023-04-18 来自辽宁
    老师,在代码分支geek_mvc2中,ContextLoaderListener加载了资源文件applicationContext.xml中的bean对象,然后DispatcherServlet会加载/WEB-INF/minisMVC-servlet.xml并扫描包com.test,那么这个包下的对象即被ioc容器加载了,又被DispatcherServlet(mvc容器)加载了,是不是后续的分支会解决这个问题

    作者回复: 分开的, mvc容器的配置文件和ioc的不同,从mvc容器中可以访问到ioc容器。

    
    
  • peter
    2023-03-31 来自北京
    请教老师几个问题: Q1:我用idea2019创建的后端项目并没有web.xml,为什么? 我创建的是springboot项目,maven项目,src目录下面是main和test,main下面是java和resource,并没有WebContent目录,也没有WEB_INF目录,更没有web.xml文件。这个现象怎么解释?另外,不同的项目有不同的目录结构,目录结构的定义在哪里有官方说明? Q2:用idea创建的项目缺省是基于tomcat吗? Q3:spring必须基于tomcat,不能独立工作吗? 按文中的说法,servlet必须要用tomcat这个容器,这样的话,spring并不能独立使用,必须依赖于tomcat。

    作者回复: 你从Github上看目录结构吧。或者你手工建web项目,然后把github上的代码copy过来。 狭义的Spring是不需要依赖Tomcat的,可以独立的。但是如果要web功能,就的要一个servlet服务器,Tomcat只是一种。

    共 4 条评论
    
  • 马儿
    2023-03-30 来自四川
    课后习题:目前Dispatcher可以 访问到WebApplicationContext中的bean,Dispatcher中的bean目前也存在对象的属性中了,但是Dispatcher没有被WebApplicationContext引用所以不能被访问。请问老师spring在管理controller产生的bean的时候是将这些bean统一注册到WebApplicationContext吗?

    作者回复: 往后看。Spring里面是用了两层application context.

    
    