在我的用例中,有时我会有bean div
,有时候没有,有什么可以。问题是当我想创建使用这个类的bean时(但不总是;它会接受MyNullable
)。
在下面的代码中如果我不提供类null
的bean我会有错误(没有查找依赖项)。我可以用MyNullable
中的required = false
链接以某种方式注释此参数吗?
@Autowired
答案 0 :(得分:2)
如果您使用的是Java 8,则可以使用Optional
:
@Bean
@Scope(SCOPE_PROTOTYPE)
public SynchronousRpcProxy myBean(MyObj1 notNull1, MyObj2 notNull2,
Optional<MyNullable> canBeNull) {
return new SmthFromExternalLib(notNull1, notNull2, canBeNull.orElse(null));
}
执行此操作且没有MyNullable
bean时,Optional
将为空,以便canBeNull.orElse(null)
返回null
。
如果您不使用Java 8,则可以创建一个具有MyNullable
作为可选依赖项的工厂bean:
@Component
public class SynchronousRpcProxyFactory
implements FactoryBean<SynchronousRpcProxy> {
@Autowired
private MyObj1 notNull1;
@Autowired
private MyObj1 notNull2;
@Autowired(required = false)
private MyNullable canBeNull;
@Override
public SynchronousRpcProxy getObject() throws Exception {
return new SynchronousRpcProxy(notNull1, notNull2, canBeNull);
}
@Override
public Class<?> getObjectType() {
return SynchronousRpcProxy.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
答案 1 :(得分:1)
您可以尝试在配置类中使用字段,而不是注入工厂方法
@Autowired(required=false)
MyNullable canBeNull;