我在Android项目中使用androidannotations,我将EBean定义为:
@EBean(scope = Singleton)
class MyBean {
public void someFunction() {
}
}
只要我第一次需要,就会创建这个bean,也就是说,只要我有:
@Bean
MyBean myBean;
在某些班级。
我在此项目中也使用了EventBus,MyBean
中的函数是@Subscriber
。不会调用此函数(当发布Event
时),因为MyBean
的实例不存在(因为我没有任何依赖项)。如何在没有专门添加依赖项的情况下创建MyBean
的实例?
我的临时解决方案是在我的Application类中定义bean。
答案 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
课程混乱。