带有@Service和autowired依赖项的Spring-starter



我有模块A。这个模块A有一个服务

@Service
public class MyService{
@Autowired
private CustomDependency dependency
@Autowired
private AnotherDependency anotherDependency
....
}

正如您所看到的,该服务具有从包含的maven依赖项自动连接而来的依赖项。

现在,我想要创建的是自定义弹簧启动器。但是,如果我使用@Service,并且它具有自动连接的依赖关系,我该如何创建它?

我能做点什么吗:

@Configuration
@ConditionalOnClass(Greeter.class)
@ComponentScan(path to myservice class )
public class MyServiceConfiguration{}

或者我该如何让配置知道如何获取@Service

是做的唯一方法

@Bean
public MyService myService(){
CustomDependency customDependency = // get this bean from spring context
AnotherDependency anotherDependency = // get this bean from spring context
return new MyService(dependency,anotherDependency);
}

或者真的有办法使用@Service吗?

首先,通过构造函数而不是属性进行注入是一种很好的做法。

您可以通过手动创建bean来实现您想要的内容。Spring Boot将在创建您的依赖关系bean时提供这两个依赖关系bean。

例如:

public class MyService{
private CustomDependency dependency;
private AnotherDependency anotherDependency;
public MyService (CustomDependency dependency, AnotherDependency anotherDependency) {
this.dependency = dependency;
this.anotherDependency = anotherDependency;
}
....
}

配置类别:

@Configuration
@ConditionalOnClass(Greeter.class)
public class MyServiceConfiguration{
@Bean
public MyService myService(CustomDependency dependency, AnotherDependency anotherDependency){
return new MyService(dependency,anotherDependency);
}
}

最新更新