JAVA代码 ·

SSM框架的整合原理以及执行流程

一、SSM框架的整合流程:

1 Spring与Mybatis整合 :关键在于spring-mybatis.xml配置文件,主要配置自动扫描、自动注入以及数据库等。前提是要配置好JDBC属性文件jdbc.properties.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:context="http://www.springframework.org/schema/context"
		xmlns:aop="http://www.springframework.org/schema/aop"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/aop  
           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
 
	<!-- 自动扫描注解的bean -->
	<context:component-scan base-package="com.zheng.service" ->
     <!-- 引入jdbc配置文件 -->  
     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
               <value>classpath:properties/*.properties</value>
                <!--要是有多个配置文件,只需在这里继续添加即可 -->
            </list>
        </property>
    </bean>
    
	<!-- 配置数据源 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<!-- 不使用properties来配置 -->
		<!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
			<property name="url" value="jdbc:mysql://localhost:3306/learning" /> 
			<property name="username" value="root" /> 
			<property name="password" value="christmas258@" /> -->
	   <!-- 使用properties来配置 -->
		<property name="driverClassName">
			<value>${jdbc_driverClassName}</value>
		</property>
		<property name="url">
			<value>${jdbc_url}</value>
		</property>
		<property name="username">
			<value>${jdbc_username}</value>
		</property>
		<property name="password">
			<value>${jdbc_password}</value>
		</property>
	</bean>
 
	<!--dao接口所在的包名,Spring会自动查找其下的类-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage"
			value="com.zheng.dao" />
	</bean>
 
	<!--Spring与Mybatis整合,不需要Mybatis的配置映射文件-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!--自动扫描mapper.xml文件,mapperLocations配置**Mapper.xml文件位置-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
	</bean>
 
	<!-- 配置transactionManager事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 配置事物通知属性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<!-- 定义事物传播特性 -->
		<tx:attributes>
			<tx:method name="insert*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="edit*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="new*" propagation="REQUIRED" />
			<tx:method name="set*" propagation="REQUIRED" />
			<tx:method name="remove*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="change*" propagation="REQUIRED" />
			<tx:method name="check*" propagation="REQUIRED" />
			<tx:method name="get*" propagation="REQUIRED" read-only="true" />
			<tx:method name="find*" propagation="REQUIRED" read-only="true" />
			<tx:method name="load*" propagation="REQUIRED" read-only="true" />
			<tx:method name="*" propagation="REQUIRED" read-only="true" />
		</tx:attributes>
	</tx:advice>
 
	<!-- 配置事物切面 需要aspectjweaver.jar-->
	<aop:config>
		<aop:pointcut id="serviceOperation" expression="execution(* com.zheng.service.*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
	</aop:config>
</beans>

2 整合Spring MVC:springmvc的配置文件单独放,需要在web.xml里面配置整合,spring-mvc.xml主要配置自动扫描、视图模式、注解的启动等。web.xml主要配置spring-mybatis.xml文件以及springmvc的Servlet。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
 
     <!--自动扫描包 扫描controller(controller层注入)-->
     <context:component-scan base-package="com.zheng.controller"></context:component-scan>
     
     <!-- 视图解析器 对模型视图添加前后缀 -->
     <bean id="viewResolver"
           class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/view/" p:suffix=".jsp"/>
 
     <mvc:default-servlet-handler/>
     
 
     <!--解决@Controller注解的使用前提配置-->
     <mvc:annotation-driven></mvc:annotation-driven>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
	<display-name>maven_springmvc_mybatis_demo</display-name>
	<!-- 编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 读取spring-mybatis整合的配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:application.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- springMVC核心配置 -->
	<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!--spingMVC的配置路径 -->
			<param-value>classpath:springmvc/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 拦截设置 -->
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name

		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

以上,完成了SSM框架的整合。

二、SSM框架中各层级间的作用及关系

  • 表现层(springMVC):Controller层(Handler层)
    • 负责具体的业务模块流程的控制
    • Controller层通过要调用Service层的接口来控制业务流程,控制的
      配置也在Spring配置文件里面。
  • 业务层(Spring):Service层
    • Service层:负责业务模块的逻辑应用设计。
    • 首先设计其接口,然后再实现他的实现类。
    • 通过对Spring配置文件中配置其实现的关联,完成此步工作,我们
      就可以通过调用Service的接口来进行业务处理。
    • 最后通过调用DAO层已定义的接口,去实现Service具体的 实现类。
  • 持久层(Mybatis):Dao层(Mapper层)
    • Dao层:负责与数据库进行交互设计,用来处理数据的持久化工作。
    • DAO层的设计首先是设计DAO的接口,
    • 然后在Spring的配置文件中定义此接口的实现类,就可在其他模块中
      调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是
      哪个类,这里用到的就是反射机制, DAO层的数据源配置,以及有
      关数据库连接的参数都在Spring的配置文件中进行配置。
  • 视图层:View层
    • 负责前台jsp页面的展示。
    • 此层需要与Controller层结合起来开发。
  • 各层间的联系:
    • Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。

三、执行流程

SSM框架的整合原理以及执行流程 JAVA代码 第1张