繁体   English   中英

多层Spring应用程序依赖项解析

[英]Multi-tiered Spring application dependency resolution

我试图创建一个春天,一个三层应用程序viewlogicdata ,或多或少。 view取决于logic ,而logic取决于data

如何在view项目中配置Spring应用程序, view能够解决依赖关系图?

例如:

view层中:

@Controller
public class SomeView {
  private final SomeService someService;

  @Autowired
  public SomeView(SomeService someService) {
    this.someService = someService;
  }
}

@Configuration
@EnableAutoConfiguration
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

logic层中:

@Component
public class SomeService {

  private final SomeData someData;

  @Autowired
  public SomeService(SomeData someData){
    this.someData = someData;
  }

}

data层中:

@Component
public class SomeData {

}

此配置无法启动,因为SomeService无法解析SomeData因为未在viewApplication.java扫描SomeData

使用@SpringBootApplication Spring Boot使用默认值。 如果查看@SpringBootApplication定义,您将看到:

许多Spring Boot开发人员的主类始终带有@ Configuration,@ EnableAutoConfiguration和@ComponentScan注释。 由于这些批注经常一起使用(特别是如果您遵循上述最佳实践),因此Spring Boot提供了一种方便的@SpringBootApplication替代方案。

@SpringBootApplication注释等效于使用@ Configuration,@ EnableAutoConfiguration和@ComponentScan及其默认属性:[...]

这意味着:

@SpringBootApplication // same as @Configuration    @EnableAutoConfiguration @ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

同样,这意味着当对@ComponentScan使用默认值时,您的程序包结构应如下所示:

  • com.example.model->您的实体
  • com.example.repositoriy->您的存储库
  • com.example.controller->控制器
  • com.example-> MainApplication类

如果不遵循此结构,则应告知@ComponentScan软件包在哪里可以找到组件:

范例1:

@Configuration
@EnableAutoConfiguration
@ComponentScan({"com.my.package.controller","com.my.package.domain"})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

范例2:

    @Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = {SomeService.class, SomeData.class})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

另外,我建议您阅读本指南 ,了解如何在Spring Boot应用程序中构造代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM