分模块实现SSM框架整合

前言

分模块实现SSM框架整合

大型Java项目都需要根据项目功能进行工程的细化;

Maven项目多模块是用项目层次的划分,替代简单的包层次的划分,遵循了高内聚,低耦合的设计模式;

工程细化的思想:分Java文件——-》分包——-》分模块——-》分工程(微服务);

我们可以借助Maven实现Java项目的分模块化开发:

  • 父工程和子模块之间的依赖会继承
  • 管理模块之间的依赖关系

一、Maven基础(回顾)

回顾之前学过的maven基础知识;

1.maven作用

  • 依赖管理:pom.xml添加依赖
  • 一键构建:点击按钮完成项目构建

分模块实现SSM框架整合

2.maven常用命令

分模块实现SSM框架整合

clean: 删除target目录(清理上一次构建过程产生的临时文件)

compile:编译src/mian/java目录下的java文件为.class文件

test: 编译src/mian/test目录下的java文件为.class文件并运行

packaage:打包编译src/mian/包含java、resources、webapp目录

install: 包部署到本地仓库

deploy:包部署到私服

3.maven生命周期

每一个生命周期就是一系列命令的集合

清理:clean

默认:compile—>test—>pakage—>install-deploy

站点:site

4.maven仓库种类

本地仓库:开发者电脑

私服:公司内网服务器

远程/中央仓库:公网服务器

5.maven主要标签

groupId : com.itheima 公司域名倒写
artifactId : spring 项目名称
version : 1.0-SNAPSHOT SNAPSHOT(快照) 测试版本 、 RELEASE(发行) 稳定版本
packing : 打包方式有 jar包 java、 war: web、 pom: 父工程

二、分模块开发(理论)

当1个大型Java项目中,我们可以把1个项目拆分成多个子模块,借助maven给每个当前项目中各个子模块,产生1个唯一的GAV坐标;(拆分)

把当前项目/模块安装到本地仓库中;

多个子模块之间就可以通过Maven的dependency标签引入当前模块依赖的其他模块,以完成模块之间的相互调用 ; (聚合)

1.模块的拆分和聚合思想

1.1.拆分:将原来的一个项目拆分成各个子模块, 每个子模块都有自己的GAV坐标;

1.2.聚合:通过GAV坐标的形式,将各个模块组装在一起,完成一个项目的功能;

2.项目和子模块的关系

项目和子模块属于继承关系,在父工程中声明的依赖,子模块都可以使用;

[En]

The project and child modules belong to inheritance relationship, and all the dependencies declared in the parent project can be used by the child module.

2.子模块之间的关系

子模块和子模块之间默认情况下没有任何关系,但是可以通过GAV坐标建立依赖关系;

3.父子工厂搭建

把1个SSM项目拆分成 ssm-web———–>ssm-service———–> ssm-dao这3个子模块,建立依赖关系,完成模块之间功能调用;

3.1.创建父工程

删除父工程的src目录;

分模块实现SSM框架整合

3.2.创建持久层模块

创建持久层模块-普通Java工程

3.3.创建业务层模块

创建业务层模块-普通Java工程

3.4.创建表示层模块

创建表示层模块-web工程

由于表示层需要和web页面交互,需要把表示层模块转换成1个web工程;

3.5.建立模块之间的依赖

分模块实现SSM框架整合

编译阶段2个模块之间建立依赖:可以通过源码建立依赖;

运行阶段2个模块之间建立依赖:必须把依赖的模块部署(package)到本地仓库中,才能被依赖;

两个模块是否建立依赖成功,可以从maven的Dependencies中查看;

3.5.1.ssm-service和ssm-dao模建立依赖

    <dependency>
        <groupId>com.zhanggengroupId>
        <artifactId>ssm-daoartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>
dependencies>

3.5.2.ssm-web 和ssm-service模块建立依赖

    <dependencies>

        <dependency>
            <groupId>com.zhanggengroupId>
            <artifactId>ssm-serviceartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
    dependencies>

3.6.依赖关系梳理

在上面的工程中存在两套关系;

3.6.1.父子工程之间继承关系

当父工程中的引入了Junit依赖之后,父工程中所有子模块也会继承Junit依赖,都可以使用的Junit功能;

3.6.2.依赖关系传递

当ssm-web模块——-依赖——–>ssm-service模块——-依赖——–>ssm-dao模块时;

此时ssm-web模块也可以调用ssm-dao模块中的功能;

ssm-web模块的配置文件也会读取ssm-dao模块所需要的依赖;

package com.heima.behavior;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import javax.sql.DataSource;
//排除model模块传递的DataSource数据库依赖
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
public class BehaviorApplication {
    public static void main(String[] args) {
        SpringApplication.run(BehaviorApplication.class, args);
    }
}

分模块实现SSM框架整合分模块实现SSM框架整合
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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd">

    class="com.alibaba.druid.pool.DruidDataSource">

    class="org.mybatis.spring.SqlSessionFactoryBean">

    class="org.mybatis.spring.mapper.MapperScannerConfigurer">

applicationContext-dao.xml

1.4.测试

分模块实现SSM框架整合分模块实现SSM框架整合
package com.zhanaggen;

import com.zhanggen.domain.Student;
import com.zhanggen.mapper.StudentMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-dao.xml")
public class StudentMapperTest {
    @Autowired
    private StudentMapper studentMapper;

    @Test
    public void testFindAll() {
        List studentList = studentMapper.findAll();
        for (Student student : studentList) {
            System.out.println(student);
        }

    }
}

StudentMapperTest.java

2.修改ssm-service模块

2.1.创建service层接口

分模块实现SSM框架整合分模块实现SSM框架整合
package com.zhanggen.service;

import com.zhanggen.domain.Student;

import java.util.List;

public interface StudentService {
    //查询所有
    List findAll();
}

StudentService.interface

2.2. 创建service实现类

分模块实现SSM框架整合分模块实现SSM框架整合
package com.zhanggen.service.impl;

import com.zhanggen.domain.Student;
import com.zhanggen.mapper.StudentMapper;
import com.zhanggen.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;

    //查询所有
    public List findAll() {
        return studentMapper.findAll();
    }
}

StudentServiceImpl.java

2.3. 添加配置文件

分模块实现SSM框架整合分模块实现SSM框架整合
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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd">

    package="com.zhanggen">

                                expression="org.springframework.web.bind.annotation.RestController"/>

    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

applicationContext-service.xml

2.4.测试

分模块开发的项目,spring容器启动之后,如何加载各个子模块下的配置文件?

监听器:监听到tomcat启动

classpath*:搜索的时候既要搜索当前项目,又要搜索当前项目依赖的jar包中的类路径

@ContextConfiguration(“classpath:applicationContext-.xml”)

分模块实现SSM框架整合分模块实现SSM框架整合
package com.zhanggen;

import com.zhanggen.domain.Student;
import com.zhanggen.service.StudentService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration({"classpath:applicationContext-service.xml", "classpath:applicationContext-dao.xml"})
//classpath*:搜索的时候既要搜索当前项目,又要搜索当前项目依赖的jar包中的类路径
@ContextConfiguration("classpath*:applicationContext-*.xml")
public class StudentServiceTest {
    @Autowired
    private StudentService studentService;

    @Test
    public void testFindAll() {
        List studentList = studentService.findAll();
        for (Student student : studentList) {
            System.out.println(student);
        }

    }
}

StudentServiceTest.java

3.修改ssm-web模块

3.1.创建controller层处理器

分模块实现SSM框架整合分模块实现SSM框架整合
package com.zhanggen.controller;

import com.zhanggen.domain.Student;
import com.zhanggen.service.StudentService;
import com.zhanggen.vo.ResultInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    //查询所有
    @GetMapping("/student")
    public ResultInfo findAll() {
        List studentList = studentService.findAll();
        return ResultInfo.success(studentList);
    }
}

StudentController.java

3.2.创建结果信息类

统一后端响应信息格式;

分模块实现SSM框架整合分模块实现SSM框架整合
package com.zhanggen.controller;

import com.zhanggen.domain.Student;
import com.zhanggen.service.StudentService;
import com.zhanggen.vo.ResultInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    //查询所有
    @GetMapping("/student")
    public ResultInfo findAll() {
        List studentList = studentService.findAll();
        return ResultInfo.success(studentList);
    }
}

ResultInfo.java

3.3.添加springMVC配置

分模块实现SSM框架整合分模块实现SSM框架整合
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
<span>&lt;</span><span>context:component-scan </span><span>base-package</span><span>=&quot;com.zhanggen.controller&quot;</span><span>/&gt;</span>

<span>&lt;</span><span>mvc:annotation-driven</span><span>/&gt;</span>

<span>&lt;</span><span>mvc:resources </span><span>mapping</span><span>=&quot;/index.html&quot;</span><span> location</span><span>=&quot;/&quot;</span><span>/&gt;</span>
<span>&lt;</span><span>mvc:resources </span><span>mapping</span><span>=&quot;/css/*&quot;</span><span> location</span><span>=&quot;/css/&quot;</span><span>/&gt;</span>
<span>&lt;</span><span>mvc:resources </span><span>mapping</span><span>=&quot;/fonts/*&quot;</span><span> location</span><span>=&quot;/fonts/&quot;</span><span>/&gt;</span>
<span>&lt;</span><span>mvc:resources </span><span>mapping</span><span>=&quot;/img/*&quot;</span><span> location</span><span>=&quot;/img/&quot;</span><span>/&gt;</span>
<span>&lt;</span><span>mvc:resources </span><span>mapping</span><span>=&quot;/js/*&quot;</span><span> location</span><span>=&quot;/js/&quot;</span><span>/&gt;</span>

beans>spring-mvc.xml

3.4.配置web.xml

spring监听器:当Tomcat启动时自动装配当前项目下所有子模块下的配置文件,启动spring

分模块实现SSM框架整合分模块实现SSM框架整合
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
<span>&lt;</span><span>context-param</span><span>&gt;</span>
    <span>&lt;</span><span>param-name</span><span>&gt;</span>contextConfigLocation<span><span>param-name</span><span>&gt;</span>

    <span>&lt;</span><span>param-value</span><span>&gt;</span>classpath*:applicationContext-*.xml<span><span>param-value</span><span>&gt;</span>
<span><span>context-param</span><span>&gt;</span>
<span>&lt;</span><span>listener</span><span>&gt;</span>
    <span>&lt;</span><span>listener-class</span><span>&gt;</span>org.springframework.web.context.ContextLoaderListener<span><span>listener-class</span><span>&gt;</span>
<span><span>listener</span><span>&gt;</span>

<span>&lt;</span><span>servlet</span><span>&gt;</span>
    <span>&lt;</span><span>servlet-name</span><span>&gt;</span>dispatcherServlet<span><span>servlet-name</span><span>&gt;</span>
    <span>&lt;</span><span>servlet-class</span><span>&gt;</span>org.springframework.web.servlet.DispatcherServlet<span><span>servlet-class</span><span>&gt;</span>
    <span>&lt;</span><span>init-param</span><span>&gt;</span>
        <span>&lt;</span><span>param-name</span><span>&gt;</span>contextConfigLocation<span><span>param-name</span><span>&gt;</span>
        <span>&lt;</span><span>param-value</span><span>&gt;</span>classpath:spring-mvc.xml<span><span>param-value</span><span>&gt;</span>
    <span><span>init-param</span><span>&gt;</span>
<span><span>servlet</span><span>&gt;</span>
<span>&lt;</span><span>servlet-mapping</span><span>&gt;</span>
    <span>&lt;</span><span>servlet-name</span><span>&gt;</span>dispatcherServlet<span><span>servlet-name</span><span>&gt;</span>
    <span>&lt;</span><span>url-pattern</span><span>&gt;</span>/<span><span>url-pattern</span><span>&gt;</span>
<span><span>servlet-mapping</span><span>&gt;</span>

<span>&lt;</span><span>filter</span><span>&gt;</span>
    <span>&lt;</span><span>filter-name</span><span>&gt;</span>characterEncodingFilter<span><span>filter-name</span><span>&gt;</span>
    <span>&lt;</span><span>filter-class</span><span>&gt;</span>org.springframework.web.filter.CharacterEncodingFilter<span><span>filter-class</span><span>&gt;</span>
    <span>&lt;</span><span>init-param</span><span>&gt;</span>
        <span>&lt;</span><span>param-name</span><span>&gt;</span>encoding<span><span>param-name</span><span>&gt;</span>
        <span>&lt;</span><span>param-value</span><span>&gt;</span>utf-8<span><span>param-value</span><span>&gt;</span>
    <span><span>init-param</span><span>&gt;</span>
<span><span>filter</span><span>&gt;</span>
<span>&lt;</span><span>filter-mapping</span><span>&gt;</span>
    <span>&lt;</span><span>filter-name</span><span>&gt;</span>characterEncodingFilter<span><span>filter-name</span><span>&gt;</span>
    <span>&lt;</span><span>url-pattern</span><span>&gt;</span>/*<span><span>url-pattern</span><span>&gt;</span>
<span><span>filter-mapping</span><span>&gt;</span>

web-app>web.xml

4.项目部署和打包

分模块开发的项目,如何部署和打包?

4.1.项目部署

ssm项目需要部署时,只需要部署ssm项目下的ssm-web模块即可;

分模块实现SSM框架整合

当ssm项目打包(package)之后ssm-web模块根据pom中声明的依赖的模块ssm-service、ssm-dao, 以jar包的形式打进war里面;

分模块实现SSM框架整合

参考

Original: https://www.cnblogs.com/sss4/p/16309207.html
Author: Martin8866
Title: 分模块实现SSM框架整合

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/114510/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总