spring-boot 搭建多模块项目(一)

   随着项目的渐渐深入,springmvc 越来越满足不了当前我们项目所运用的模式了。虽然spring mvc 也是分成了controller、service、dao、util(common)等层级模块。但是如果想复用某一个比如说是底层common的话剥离开来就变得异常的麻烦, 因此模块分离也变得越来越有需要和必要了。

   按包分块变得越来越流行,并且springboot 也变得越来越成熟和深得广大程序员的喜爱,大大减轻了项目开发和搭建的时间。在如今idea盛行的情况下,我就以springboot 作为接入口,0基础和大家探讨并且搭建springboot 多某块的系统构建。此次我先跳过在idea 上配置jdk 和maven的步骤,如果需要请在留言区提出来我再补发。

项目构建

    打开idea,File->new Project.选择左边框中的Spring Initializer

选择next ,修改好Group 和 Artifacet

点击next  什么都不要选。最后点finish

创建结束后,删除src、mvn、等,只保留一个pom.xml文件,最终如下图:

 

开始创建子模块

选中project->new ->Module  

      填写ArtifactiId 

    next->修改一下Module name 中间加个斜杠(为了好区分)。点击finish 。

     同理 添加dao,service,web层,此时 spring-bootdemo中的pom.xml文件中自动包含了这四个module。

 

设置启动项

 到目前为止基本的模型已经出现,但是还是不能运行。接下去就要配置基本的入口了。

1.首先在demo-web中添加spring-boot 的依赖项

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
           <!-- <version>RELEASE</version>
            <scope>compile</scope>-->
        </dependency>
    </dependencies>

然后在 demo-web层创建一个com.bsoft.demo包,在demo下(和web同目录)创一个DemoApplication .java.代码如下所示:

package com.bsoft.demo;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args){
        SpringApplication.run(DemoApplication.class);
    }
}

为什么这个不能写在web包下面呢?SpringBoot 在启动的时候默认会在启动类所在的包的路径进行扫描,然后将扫描的类自动注入。如果写在web下面,那么像其他module下面的就扫描不到了(因为只会扫描web包下面的class)。

我们在web目录下创建一个LoginController.java 用于接收前端传来的请求。看一下代码:

package com.bsoft.demo.web;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("login")
public class LoginController {

    @GetMapping("/index")
    public Map<String,Object> login(){
        Map<String,Object> res_Map = new HashMap<String,Object>();
        res_Map.put("key","1");
        return res_Map;
    }
}

解释一下:@RestController,官网上解释:

This code uses Spring 4’s new @RestController annotation, which marks the class as a controller where every method returns a domain object instead of a view. It’s shorthand for @Controller and @ResponseBody rolled together.
当然我们也可以直接进入RestController的代码中去看 很容易我们就知道,其实它就是@Controller+@ResponseBody的集合了。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Controller;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

 

这下妈妈再也不用担心我们忘记写ResponseBody 返回的格式而导致前台解析报错了。最简单的springboot 搭建好了。我们来试下,在DemoApplication页面右键,run。等待springboot起来后,查看下面端口号 8080 

在浏览器上输入地址,就可以返回啦。

 

接下来,配置各个模块的依赖关系。

  • 父工程pom文件中都要声明所有的子模块的依赖。
  • 子模块之间依赖关系:dao层依赖common层,service 依赖dao层,web依赖service层。
  1. 父工程pom文件中声明所有子模块依赖:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
        <packaging>pom</packaging>
        <modules>
            <module>demo-common</module>
    		<module>demo-dao</module>
    		<module>demo-service</module>
    		<module>demo-web</module>
    	</modules>
        <parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.2.1.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.soft</groupId>
    	<artifactId>spring-bootdemo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>spring-bootdemo</name>
    	<description>Demo project for Spring Boot</description>
    
    	<properties>
    		<java.version>1.8</java.version>
    		<module.version>0.0.1-SNAPSHOT</module.version>
    	</properties>
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-starter</artifactId>
    			</dependency>
    
    			<dependency>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-starter-test</artifactId>
    				<scope>test</scope>
    				<exclusions>
    					<exclusion>
    						<groupId>org.junit.vintage</groupId>
    						<artifactId>junit-vintage-engine</artifactId>
    					</exclusion>
    				</exclusions>
    			</dependency>
    
                <!--下面新增-->
    			<dependency>
    				<groupId>com.soft</groupId>
    				<artifactId>demo-common</artifactId>
    				<version>${module.version}}</version>
    			</dependency>
    
    			<dependency>
    				<groupId>com.soft</groupId>
    				<artifactId>demo-dao</artifactId>
    				<version>${module.version}}</version>
    			</dependency>
    			<dependency>
    				<groupId>com.soft</groupId>
    				<artifactId>demo-service</artifactId>
    				<version>${module.version}}</version>
    			</dependency>
    			<dependency>
    				<groupId>com.soft</groupId>
    				<artifactId>demo-web</artifactId>
    				<version>${module.version}}</version>
    			</dependency>
    		</dependencies>
    
    	</dependencyManagement>
    
    
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

    demo-web 添加demo-service依赖

    <dependency>
                <groupId>com.soft</groupId>
                <artifactId>demo-service</artifactId>
            </dependency>

    demo-service 添加demo-dao依赖

     <dependencies>
            <dependency>
                <groupId>com.soft</groupId>
                <artifactId>demo-dao</artifactId>
            </dependency>
        </dependencies>

    demo-dao 添加demo-common依赖

    <dependencies>
            <dependency>
                <groupId>com.soft</groupId>
                <artifactId>demo-common</artifactId>
            </dependency>
        </dependencies>

    各个模块之间的调用

        demo-common:

package com.bsoft.demo.utils;


import org.springframework.stereotype.Repository;


@Repository
public class StringUtils {

    public String returnString(){
        return "返回String";
    }
}

demo-dao:

package com.bsoft.demo.dao;


import com.bsoft.demo.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class BaseDao {

@Autowired
    StringUtils stringUtils;
    public String getBaseDao(){
        return "数据库已启动"+stringUtils.returnString();
    }
}

demo-service :接口:

package com.bsoft.demo.service;

import javax.annotation.Resource;


public interface DemoService {
    String returnSomthing();
}

接口实现:

package com.bsoft.demo.service.impl;

import com.bsoft.demo.dao.BaseDao;
import com.bsoft.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DemoServiceImpl implements DemoService {

@Autowired
    BaseDao baseDao;
    @Override
    public String returnSomthing() {
        return baseDao.getBaseDao();
    }
}

demo-web LoginContorrol:

import com.bsoft.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("login")
public class LoginController {

    @Autowired
    DemoService demoService;

    @GetMapping("/index")
    public Map<String,Object> login(){
       String sonthing =  demoService.returnSomthing();
        Map<String,Object> res_Map = new HashMap<String,Object>();
        res_Map.put("key",sonthing);
        return res_Map;
    }
}

最后我们的访问的效果是:

 

资源在下面的连接,有需要的可以自行下载。本来想免费给大家的,但是csdn一定要有分数才行

spring-boot 从0开始创建多模块项目

发布了27 篇原创文章 · 获赞 46 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章