如何定义弹出托管方法签名,其中注入的服务是可选的?
以下操作当然不起作用,因为方法签名中不允许@Autowired
注释。但这就是我的意图。
@Bean
public MyService myService(@Autowired(required = false) OptionalService optional) {
MyService service = new MyService();
//configure service if optional service is supplied
return service;
}
答案 0 :(得分:5)
您不应该将@Bean与方法一起使用,而是使用MyService
声明您的类@Service
并使用Spring配置进行扫描。然后,您可以拥有OptionalService
类型的字段@Autowired(required = false)
。
您的服务应如下所示:
@Service
public class Myservice {
@Autowired(required=false)
private OptionalService optional;
}
然后,如果您需要在Spring注入OptionalService之后执行某些操作(或者不是因为它不需要),您可以让您的服务实现InitializingBean
及其afterPropertiesSet
方法,并在此处执行