ssh2和ssm框架的spring ioc容器是否管理struts2和spring mvc的控制器的生命周期?

发布于 2022-09-11 15:13:05 字数 17 浏览 21 评论 0

请两个框架都说一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

暮年 2022-09-18 15:13:05

struts2 没有用过,我就谈谈 SpringMVC 的控制吧,SpringMVC 的控制器,我可以理解成DispatcherServlet, 这个类在传统的Spring项目中会在web.xml中进行配置,以下皆以传统Spring项目为例(SpringBoot同理),配置完之后,Servlet容器(tomcat举例)会为DispatcherServlet实例并且初始化,如果load-start-up配置为>= 1 那么,tomcat会主动发起一次http请求,此时dispathcerServlet已经可以投入使用了。

如果你配置了Springmvc.xml文件,并且在内部有mvc:resource的配置,很好,Spring会去加载,加载的东西,参考MvcNameSpaceHandler , 于是 RequestMappingHandler RequestMappingHandlerAdapterSimplexxx 会被加载到Spring容器中,如果配置了 mvc:default-servlet ,那么会对静态资源进行一次重定向处理,重定向到defaultServlet,如果没有配置,也不要怕,我们还有dispatcherServlet.properteis文件。内置了 handlerMapping HandlerAdapter

接下来回答正题,控制是有的,但是没有也是可以的。

  • 控制体现在,Spring可以通过mvc命名空间去加载一些bean处理资源。
  • 没有也可以的是配置文件本身也有

另外这里涉及Spring父子容器的关系,就不多说了

Servlet路径映射和springmvc路径处理

土豪我们做朋友吧 2022-09-18 15:13:05

能被 IOC 管理的都是打了 @Component 及相关注解的,否则 Spring 启动后扫描需要管理的 Bean 时根本就不会理会。

如果你想知道 Spring 有没有处理一些类,那么可以这样:

@Component
public class BeanScanner implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization (Object bean, String beanName) throws BeansException {
        System.out.println(String.format("<<Post>> bean: %s | name: %s", bean.getClass().getName(), beanName));
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization (Object bean, String beanName) throws BeansException {
        return bean;
    }
}

跑一下,去日志里看看 <<Post>> 开头的记录里有没有你想看的那几个类。

清晨说晚安 2022-09-18 15:13:05

谢谢回答。我已找到答案:
ssh2的开发者定义的struts2控制器spring ioc容器不管理其生命周期,因为struts2的action往往不加spring的注解,@Controller注解是针对spring mvc的controller的,不适用于struts2的action。struts2的action加了@Component注解就会被spring容器管理生命周期,当成一个普通的bean,这种注解的添加不常见。ssm会管理一些Handler和Adapter的生命周期,开发者定义的控制器也会被管理,因为spring容器分为应用层spring容器和web层spring容器,属于父子关系,符合依赖倒转原则。

以下是网络文章的举例:
ssm请看这一段:
https://blog.csdn.net/l_black...
Controller即声明这个类是一个控制器,上面第二部分我们说明了,只要加了@Controller标示的,spring会通过自动扫描机制,将这个类纳入spring容器管理中。

ssh2的请看这一段:

     那时我有些不是很明白,为什么我的action类没有写注解@Component("xxAction"),还是可以被spring自动装配。那是因为action类被struts和struts2-spring-plugin创建,再由spring自动装配,但不由spring管理。如果我们想使用spring复杂的aop或spring其他的功能时,强烈建议将acion类注册到spring容器中。

一袭水袖舞倾城 2022-09-18 15:13:05

struts在新的项目里不推荐使得

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文