gpt4 book ai didi

java - 带有空参数的@Bean方法

转载 作者:行者123 更新时间:2023-12-01 21:25:38 24 4
gpt4 key购买 nike

在我的用例中,有时我确实有 bean MyNullable,有时没有,这没关系。问题是当我想创建使用此类的 bean 时(但并非总是如此;它将接受 null)。

在下面的代码中,如果我不提供类 MyNullable 的 bean,我将出现错误(找不到依赖项)。我可以以某种方式使用 @Autowired 中的 required = false 链接来注释此参数吗?

@Bean
@Scope(SCOPE_PROTOTYPE)
public SynchronousRpcProxy myBean(MyObj1 notNull1, MyObj2 notNull2, MyNullable canBeNull) {
assert notNull1 != null;
assert notNull2 != null;
// assert canBeNull!= null; // this is not true because canBeNull can be null
return new SmthFromExternalLib(notNull1, notNull2, canBeNull); // do staff
}

最佳答案

如果您使用的是 Java 8,则可以使用可选:

@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) 返回

如果您不使用 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;
}
}

关于java - 带有空参数的@Bean方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38201819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com