创建两个 module
demo-starter, 这个module是为了让别的module引入的starter包demo-main, 这个module会引入demo-starter包
两个 module 的包结构如下所示
demo-starter
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─example
│ │ │ │ └─demostarter 包下有 StarterDemo 类
│ │ │ └─resources
│ │ │ └─META-INF
│ │ │ └─spring 文件夹下有 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件
StarterDemo 类如下
public class StarterDemo {
public void starterDemo() {
System.out.println("StarterDemo");
}
}
org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件内容如下
com.example.demostarter.StarterDemo
demo-main
│ ├─.mvn
│ │ └─wrapper
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─example
│ │ │ │ └─demomain 包下有 DemoMainApplication 类
│ │ │ └─resources
DemoMainApplication 类内容如下
@SpringBootApplication
public class DemoMainApplication implements ApplicationContextAware {
private static ApplicationContext context;
public static void main(String[] args) {
SpringApplication.run(DemoMainApplication.class, args);
// 只是引入了依赖而已,并没有手动注入 StarterDemo 类
// 但是这个类也在 spring 容器中,就是因为自动装配
context.getBean(StarterDemo.class).starterDemo(); // 会输出 “StarterDemo”
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
}
demo-main 的 pom.xml 依赖如下
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>demo-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>