SpringBoot3自动装配案例

231 阅读1分钟

创建两个 module

  1. demo-starter, 这个 module 是为了让别的 module 引入的 starter
  2. 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-mainpom.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>