AndroidAnnotations - 在不添加依赖项的情况下创建Singleton EBean

时间:2016-02-07 14:41:02

标签: android-annotations greenrobot-eventbus

我在Android项目中使用androidannotations,我将EBean定义为:

@EBean(scope = Singleton)
class MyBean {
    public void someFunction() {
    }
}

只要我第一次需要,就会创建这个bean,也就是说,只要我有:

@Bean
MyBean myBean;

在某些班级。 我在此项目中也使用了EventBusMyBean中的函数是@Subscriber。不会调用此函数(当发布Event时),因为MyBean的实例不存在(因为我没有任何依赖项)。如何在没有专门添加依赖项的情况下创建MyBean的实例?

我的临时解决方案是在我的Application类中定义bean。

2 个答案:

答案 0 :(得分:0)

我认为你以最干净的方式做到了这一点。让您的CustomApplication类包含@Bean MyBean myBean,即使它从不调用它上面的函数。使用AA和事件总线用户类,这是我找到的唯一解决方案。

该类需要在某处实例化。由于它是单例,因此在CustomApplication类中执行它似乎最干净。另一种方法可能是使该类成为服务(在Android意义上 - "扩展服务"),这将允许您在AndroidManifest.xml文件中声明它。但由于您不需要任何Android服务功能,这似乎是错误的方法。

答案 1 :(得分:0)

事实证明,如果不将其注入某处,就无法创建EBean。请参阅此问题:https://github.com/excilys/androidannotations/issues/1692

我的解决方案是拥有一个类EBeanManager(也是一个EBean),它只是注入我需要创建的bean。 EBeanManager被注入我的Application课程。我在一个单独的课程中这样做的原因是为了避免我的Application课程混乱。