之前开发项目的时候,都是在项目中根据逻辑分为dao、service、web层,这些都是在一个项目内部进行分层,所表现的形式就是不同的包。
但是这种方式会带来一些问题:
其实不管是分包还是分模块,都是为了让我们的代码能够具有重用性,同时也能降低代码之间的依赖(解耦合)。
不知不觉说这么多了,下面就直接手把手教大家如何搭建一个多模块的项目。
我这边用的是idea,eclispe的玩家可以忽略本文,我不是很熟 -。-
idea 中创建Spring Initializr 工程,依赖包的啥都不要选。创建结束后,删除src、mvn、等,只保留一个pom.xml文件。
到现在为止,这仅仅是一个maven项目,都没有个启动的入口,我们这里可以利用springboot添加一个入口类。
org.springframework.boot
spring-boot-starter-web
RELEASE
compile
然后在 demo-web层创建一个com.cj.demo.web包,在demo下(和web同目录)创一个DemoApplication .java.代码如下所示:
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);
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("demo")
public class IndexController {
@GetMapping("test")
public String test() {
return "test";
}
}
可能会出现的问题:
1 错误: 找不到或无法加载主类 com.cj.DemoApplication
启动项中的路径不对,修改一下就好了,如下图进行修改:
0.0.1-SNAPSHOT
com.cj
demo-dao
${module.version}
com.cj
demo-web
${module.version}
com.cj
demo-service
${module.version}
com.cj
demo-service
com.cj
demo-dao
package com.cj.demo.service;
public interface DemoService {
String test();
}
DemoServiceImpl 类:
package com.cj.demo.service;
import org.springframework.stereotype.Service;
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String test() {
return "hello world";
}
}
import com.cj.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;
@RestController
@RequestMapping("demo")
public class IndexController {
@Autowired
private DemoService demoService;
@GetMapping("test")
public String test() {
return demoService.test();
}
}
可能会遇到的问题:
启动项所在包 com.cj.demo.web.controller
DemoService com.cj.demo.service.
这两个路径没有包含关系,所以找不到类。
解决方法:
现在的路径是com.cj.demo 扫描就会从这个路径开始 com.cj.demo.service同样会扫描到。
2. 启动项加入注解强制扫描:
@SpringBootApplication(scanBasePackages = "com.cj.demo")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class);
}
}
到这里springboot 多模块项目已经搭建了一大半了,最后还有个最重要的Data这一层的处理,我们下一篇博客在给大家介绍,后续的话,我这边应该还会写一篇关于多模块打包的文章,包括jar和war包。有兴趣的同学可以点个关注,谢谢大家。
最后附上demo 的下载地址:demo