SSM应用(六)--SSM集成

整合分析

  首先,我们先来回顾一下Spring,SpringMVC,MyBatis这三个框架各自做了什么;

  Spring:用于实现bean的实例化和bean与bean之间的管理;

    在SSM集成中,将各层进行整合,管理MyBatis、Service、SpringMVC;

  SpringMVC:取代了servlet,用于分发请求给bean的实例;

    在SSM集成中,用于管理请求分发的bean;

  MyBatis:取代了JDBC,用于实现dao层,对数据进行操作;

    在SSM集成中,推荐使用代理模式,Spring会生成MyBatis接口中的代理实现类;

整合步骤

  1、将每一层的类变成Spring中的实例;

  2、建立每一层中类的关系;

  

    工程目录结构:

  

  3、整合dao层:扫描mapper接口生成代理实现类的bean;

   (1)、将MyBatis的代理实现类变成Spring中的bean;

    会用到MapperScannerConfigurer类扫描包,将包中的接口和mapper映射文件关联起来生成代理对象;

   (2)、需要Spring管理SqlSessionFactory对象和DataSource对象

<!-- 引入属性配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 
    配置数据源:bean,Spring会通过配置文件将该对象实例化,Apache提供了dataSource支持类
    Spring可以实例化出DataSource数据源对象
 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${driver}"></property>
    <property name="username" value="${username}"></property>
    <property name="password" value="${password}"></property>
    <property name="url" value="${url}"></property>
    <property name="maxActive" value="10"></property><!-- 最大连接数 -->
    <property name="maxIdle" value="5"></property><!-- 最大同时活跃数 -->
</bean>
    
<!-- 配置SqlSessionFactory:Spring提供的管理,提供了一个类 -->
<bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 数据源的配置 -->
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
</bean>
    
<!-- 使用包扫描的方式,将指定包下的接口都生成代理类,Spring和MyBatis整合包下所提供的一个类具备的功能 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="dao"></property>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

  

  4、整合service层:扫描service包,将有注解的service实现类变成bean,实现事务控制;

   (1)、将service的实现类变成Spring中的bean;我们可以通过配置文件和注解的方式实现;

    基于配置文件配置bean

<!-- 基于配置文件 -->
<bean id="authorService" class="service.Impl.AuthorServiceImpl">
    <property name="authorDao" ref="authorDao"></property>
</bean>

      在service层中,注意要实现dao层的get,set方法

public class AuthorServiceImpl implements AuthorService {

    AuthorDao dao;

    public AuthorDao getDao() {
        return dao;
    }

    public void setDao(AuthorDao dao) {
        this.dao = dao;
    }
}

    基于注解方式实现:

<!-- 基于注解形式:配置要扫描哪个包 -->
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="service"></context:component-scan>

      同样,要实现dao层的get,set方法;

@Service("authorService")
public class AuthorServiceImpl implements AuthorService {
    
    @Resource
    AuthorDao dao;

    public AuthorDao getDao() {
        return dao;
    }

    public void setDao(AuthorDao dao) {
        this.dao = dao;
    }
}

  

  5、整合SpringMVC:本质就是一个Spring,自己是一个servlet的存在,将controller类变成它管理的实例;

   (1)、在web.xml文件中配置SpringMVC为一个servlet

<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springMVC.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping> 

   (2)、配置SpringMVC的核心配置文件:controller的实例bean、视图解析的bean;

<!-- 启用注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 要扫描的包: -->
<context:component-scan base-package="controller"></context:component-scan>
     
<!-- 视图解析 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

  

  6、在这里,我们把核心配置文件按照层的关系分成了不同的配置文件,那么要怎么才能把他们关联起来。在程序运行时同时解读呢?

    所以我们就需要用到Spring提供的监听器了,将配置的所有bean和bean之间的关系管理起来

    我们需要在web.xml中配置监听器;

<!-- 
    Spring提供了监听器:Tomcat启动的时候,就去读取Spring的配置文件,创建Spring上下文
    创建实例,建立实例之间的关系
-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

  SSM集成到此也就结束了,希望能对大家有所帮助;

PS:因作者能力有限,如有误还请谅解;

猜你喜欢

转载自www.cnblogs.com/WHL5/p/9013689.html
ssm
今日推荐