[英]Multi-tiered Spring application dependency resolution
我試圖創建一個春天,一個三層應用程序view
, logic
, data
,或多或少。 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
因為未在view
層Application.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
使用默認值時,您的程序包結構應如下所示:
如果不遵循此結構,則應告知@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.