隨着項目的漸漸深入,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層。
- 父工程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一定要有分數才行