簡體   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