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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章