[英]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.