如何使方法签名中的spring托管类可选?

时间:2014-08-05 14:36:02

标签: java spring

如何定义弹出托管方法签名,其中注入的服务是可选的?

以下操作当然不起作用,因为方法签名中不允许@Autowired注释。但这就是我的意图。

@Bean
public MyService myService(@Autowired(required = false) OptionalService optional) {
     MyService service = new MyService();
     //configure service if optional service is supplied
     return service; 
}

1 个答案:

答案 0 :(得分:5)

您不应该将@Bean与方法一起使用,而是使用MyService声明您的类@Service并使用Spring配置进行扫描。然后,您可以拥有OptionalService类型的字段@Autowired(required = false)。 您的服务应如下所示:

@Service
public class Myservice {

  @Autowired(required=false)
  private OptionalService optional;

}

然后,如果您需要在Spring注入OptionalService之后执行某些操作(或者不是因为它不需要),您可以让您的服务实现InitializingBean及其afterPropertiesSet方法,并在此处执行