SSH/SSM整合分析

14 篇文章 0 订阅
13 篇文章 0 订阅

1. SSH框架:
    1.struts2 与 Spring整合要解决的核心问题是,如何在action中获得被spring管理的service
        解决思路: 
            1: 想办法让action具有 自动注入的功能;
                
            2: 让action纳入spring管理;
        解决方案: 导入整合包: struts2-spring-plugin-2.1.8.1.jar ;
            struts-plugin.xml 比 struts-default.xml 后加载, 所以可以在插件中配置的action创建工厂
            StrutsSpringObjectFactory 可以覆盖 默认配置中action创建工厂 ObjectFactory;
            
            由于StrutsSpringObjectFactory 在管理action中首先会根据请求的action的标签:
        <action class="根据这个类名去Spring中找Action个">中,根据 class 属性的内容去Spring容器中
        去寻找同名action,如果找到那么这个action也是在Spring管理之中所以,可以注入Service; 如果没有
        找到,那么这个工厂会自己创建一个Action并且这个action具有自动注入Service的功能;
        
        所以根据:  <action class="根据这个类名去Spring中找Action个"> 标签中的class属性是否是全类名:
            分为:全类名整合方式,和伪类名整合方式
        
        PS: 说明一点,在实际生产中我们会在Action中使用注解,所以在action类头上有两套注解:
            1. 一套Struts2的注解: 相当于在 struts.xml中配置了 <action class="全类名">
            2. 一套spring的注解: 相当于在spring容器中配置了<bean id="类名首字符小写">
            我们仔细看上边两个注解代表的配置就会看出一个bug:  SpringObjectFactory 在管理获得action
        时会拿着 <action class="全类名"> 中class属性值,去Spring容器中找 <bean id="类名首字符小写">中
        找<bean>的id 与 <action>的class属性值相同的 action, 由于注解配置时, 一个是全类名,一个是类名首
        字母小写,所以永远可能相同,那么此时,SpringObjectFactory 会自己创建一个 action对象,这意味着这个
        action并没有在spring管理之中,而在spring管理中的action永远不会被使用(除非在类上的注解中用
        全类名指明action,或者在方法中指明全类名,当然这样的操作我们一般都不会去做的);所以说在注解配置
        整合spring和struts2时,在action类头上的spring注解是不起作用的,是可以删掉的;
        
    2. spring与hibernate整合两种方式: 1. 零障碍整合; 2. spring管理hibernate配置;
        1.零障碍整合:
            在spring的配置文件    applicationContext.xml中配置bean: 并引入hibernate的核心配置文件;
                <bean id= "sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
                    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
                </bean>
        2.spring管理hibernate配置:将hibernate的核心配置文件 hibernate.cfg.xml中的内容迁移到 applicationContext.xml中;
            <bean id= "sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
                    <-- 连接池 -->
                    <property name="dataSource" ref=""/>
                    
                    <-- 映射文件 -->
                    < 这个地方可以配置映射文件路径, 也可以注解配置时配置包扫描>
                    
                    <-- hibernate一些属性配置 -->
                    <property name="hibernateProperties" >
                        <props>
                            <prop key="hibernate.show_sql">true<prop>
                            <prop key=""><prop>
                        </props>
                    </property>                    
            </bean>
        

2. SSM框架整合    
    1. mybatis的核心要解决的问题是: 如何使用外置sql(mapper中的sql映射) 来实现CRUD操作,所以Spring与Mybatis
    整合的核心问题之一是,如何将Mybatis的外置sql 对象化; spring是通过将外置sql 转化为 dao层接口的代理实现类对象
    来将外置sql利用起来,并以代理对象的形式提供给service层使用;
    
        mybatis与spring整合的核心问题:
            1. 是让mybatis的SessionFactory 被Spring管理; 由整合类完成:org.mybatis.spring.SqlSessionFactoryBean ;
            2. 是 spring要利用外置sql 创建 mapper 代理对象; 通过包扫描: 
                        <!-- 配置Mapper扫描器 -->
                        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                            <property name="basePackage" value="com.itheima.springmvc.mapper"/>
                        </bean>
        
        mybatis与spring整合 和 hibernate与spring整合 配置内容对比:
            1. mybatis 还要保留核心配置文件: sqlMapConfig.xml , hibernate 不需要保留核心配置文件: hibernate.cfg.xml 
            2. 在spring的配置文件 applicationContext-dao.xml 中,要配置连个东西:
                1. 连接配置: SessionFactory 配置;
                    hibernate与spring整合时: 注入 1. dataSource, 2. domain(映射), 3. hibernate一些属性配置(比如方言之类)
                    mybatis与spring整合: 注入 1. dataSource,                      2. 核心配置文件 
                2. 操作配置: Dao配置;
                    hibernate与spring整合时: 将dao实现类配置 到<bean>中,然后注入sessionFactory;
                    mybatis与spring整合: 配置mapper接口包扫描,至于sessionFactory 不需要手动注入,它会自己到Spring容器中寻找;
                
                容易看出来,在mybatis的 sessionFactory 配置中没有配置映射文件,那么它是在哪里配置的呢? 它的配置被放到了
                操作配置中: 在扫描Dao层中的Mapper接口包时,会同时在相同目录下寻找对应的mapper.xml文件,完成映射文件扫描;
                
        
        
    2. Springmvc要解决的问题是: 将请求的处理从基于对象到基于方法,实现单例方法响应高并发;根本原因在于参数接收
    时与Struts2的方式不同,Struts是利用值栈让成员变量接收请求参数,Springmvc是利用参数解析器,让方法形参接收请求
    参数;
        
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值