【问题标题】:Autowiring Optional<object> in Spring 4.1在 Spring 4.1 中自动装配 Optional<object>
【发布时间】:2015-07-18 05:12:20
【问题描述】:

我正在尝试在组件中自动装配 Optional。 对象处于自定义 ThreadScope 和 proxy-mode = INTERFACES。

我认为@Autowired Optional&lt;ObjectType&gt; objectTypeOptional 只是确保不需要自动装配。 现在objectTypeOptional.isPresnet() 总是返回真。因为有 ObjectType 的代理。有没有办法说 objectTypeOptional 不存在?

发布编辑(为问题添加更多上下文):

我的豆子是这样的 -

@Component
public User {
    private final userName;
    private final userEmail;
    // constructors and getters
}

现在我想在任何服务或控制器中注入可选的用户。就像是 - @Autowired Optional&lt;User&gt; userOptional;

因此,每当用户登录时,过滤器/拦截器都会创建一个适当的User 对象。但是当没有用户登录时,我应该可以通过可选的方式检查它 - userOptional.isPresent()

【问题讨论】:

    标签: spring spring-mvc dependency-injection ioc-container


    【解决方案1】:

    我相信 Provider 会更适合你。

    Java Docs

    你会自动接线

    @Resource
    Provider<UsersConnectionRepository> usersConnectionRepositoryProvider;
    

    并在 Provider 上有一个方法或调用 get()

    private UsersConnectionRepository getUserConnectionRepository() {
        return usersConnectionRepositoryProvider.get();
      }
    

    你也可以@Autowired(required = false)

    【讨论】:

    • 我实际上想要一种方法来确定对象是否存在。例如,每当有登录用户时,我都会创建一个 User 对象。否则 User 对象为空。因此,如果我可以注入 Optional&lt;User&gt;,我可以在访问之前检查 User 是否存在。
    • 如果您创建用户,那么您也可以使用其方法 Optional.of(..)Optional.ofNullable(..) 自己创建 Optional。
    • 对不起。我仍然不完全理解您的解决方案。你是说 - @Autowired Provider&lt;Optional&lt;User&gt;&gt; optionalUserProvider; 并在提供者 private Optional&lt;User&gt; getOptionalUser() {} 上有一个方法 get()
    • 不完全。你能把你的 bean 显示在你想要返回的地方吗?
    • 为问题添加了更多上下文。请检查帖子编辑部分。
    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2013-11-12
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2014-06-22
    相关资源
    最近更新 更多