博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH--三大框架整合原理
阅读量:6427 次
发布时间:2019-06-23

本文共 1988 字,大约阅读时间需要 6 分钟。

https://blog.csdn.net/u014010769/article/details/44993533

 

三大框架整合原理

1、三大框架的作用
struts2是一个mvc框架
spring容器
1、利用ioc和di做到了完全的面向接口编程
2、由于spring的声明式事务处理,使程序员不再关注事务
3、dao层和service层的类是单例的,但是action层是多例
hibernate
就是一个数据库的ormapping的框架
2、整合原理
1、当tomcat启动时,做的事情
因为在web.xml中,
                 <listener>
                   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                 </listener>
                 <context-param>
                     <param-name>contextConfigLocation</param-name>
                     <param-value>classpath:spring/applicationContext.xml</param-value>
                 </context-param>
                 <filter>
                     <filter-name>struts2</filter-name>
                     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
                 </filter>
                 <filter-mapping>
                      <filter-name>struts2</filter-name>
                      <url-pattern>/*</url-pattern>
                 </filter-mapping>
所以在启动的时候,执行的是
                 ContextLoaderListener contextInitialized this.contextLoader =createContextLoader();
加载spring的配置文件,这里有一个固定的参数con的textConfigLocation,可以指定classpath路径下的spring的配置文件,也可以任意位置指定配置文件  spring*.xml    WEB-INF/任意多个任意文件夹/spring-*.xml
如果没有指定固定参数,则查找默认的加载路径:WEB-INF/applicationContext.xml
this.contextLoader.initWebApplicationContext(event.getServletContext());
启动spring容器
     总结:当tomcat启动的时候,spring容器就启动了,这个时候service层和dao层所有的单例类就创建对象了
struts2容器:
     加载了default.properties,struts-default.xml,struts-plugin.xml,struts.xml
   2、请求一个url时,发生的事情:
        1、在引入jar包时,导入了struts2-spring-plugin-2.1.8.1.jar包,该jar中有一个文件struts-plugin.xml
                <beantype="com.opensymphony.xwork2.ObjectFactory" name="spring"
                     class="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
                <constantname="struts.objectFactory" value="spring" />
        2、由于上面的配置改变了action的生成方式,action由StrutsSpringObjectFactory生成,经过查找是由SpringObjectFactory中的buidBean方法生成的
                         try {
                              o =appContext.getBean(beanName);
                          } catch(NoSuchBeanDefinitionException e) {
                              Class beanClazz =getClassInstance(beanName);
                              o =buildBean(beanClazz, extraContext);
                         }
3、由上面的代码可以看出,先从spring容器中查找相应的action,如果没有找到,再根据反射机制创建action,beanName就是struts配置文件class属性的值,所以class属性的值和spring中ID的值保持一致

 

转载于:https://www.cnblogs.com/arrows/p/10511428.html

你可能感兴趣的文章
德州仪器第四季度净利润8.36亿美元 同比增1%
查看>>
打造“天网工程”用“大数据”说话
查看>>
东莞发放光伏发电财政资金补助 莞企和居民都可以申请
查看>>
《全栈性能测试修炼宝典 JMeter实战》—第2章 2.6节性能测试相关术语
查看>>
《Spring攻略(第2版)》——1.2 配置Spring IoC容器中的Bean
查看>>
Hive之三种查询方式
查看>>
《大数据思维——从掷骰子到纸牌屋》
查看>>
javascript实现中国各大城市快速下拉选择
查看>>
Copycat - Overview
查看>>
redis命令操作之generic和string.java
查看>>
java的接口回调
查看>>
数据结构之自建算法库——单链表
查看>>
干掉你代码中的坏味道
查看>>
elasticsearch web界面查询
查看>>
python selenium,PhantomJS运用 抓取滚动条滚动加载的页面, js动作操作,模拟登陆...
查看>>
Comparable Comparator equals
查看>>
[LeetCode]--172. Factorial Trailing Zeroes
查看>>
对象跟踪小白?本文带你玩转OpenCV(C ++ / Python)
查看>>
28个你必须知道的HTML5的新特性,技巧以及技术
查看>>
使用阿里云code和git管理项目
查看>>