英文:
Annotation processing for pubsub
问题
我有一个使用 Kafka 实现发布订阅机制的第三方库。我有类似以下的代码来订阅主题:
DDS.createListener((topic) -> "对这个主题做些事情");
我想更进一步,想要创建一个如下所示的注解:
@Subscribe("topicName")
public void listen(Topic topic) {
// 对这个主题做些事情
}
在处理注解时,我遇到了问题。
首先,我需要找到用 @Subscribe 注解标记的方法,然后需要在幕后监听相关主题,当接收到主题时,将其传递给被注解的方法,在示例中即为 "listen" 方法。
在哪里应该进行监听部分,即:
DDS.createListener((topic) -> listen() /* 不知道如何访问 listen 方法 */)
而且,要调用 listen 方法,我需要一个类实例,但我不确定该如何处理。使用 Class.newInstance()
并不合适。我是否需要一种不同的配置?
英文:
I have 3rd party library that uses kafka to abstract pub sub mechanism. I have something like following to subscribe topic
DDS.createListener((topic) -> "do sth with this topic");
I want to take it further and want to create an annotation as follows
@Subscribe("topicName")
public void listen(Topic topic) {
// do sth with this topic
}
I am having problems when processing annotation.
First, I need to find methods annotated with Subscribe and then need to listen for topics behind the curtain and then when one received, direct it to the annotated method, "listen" in the example case.
Where should I do the listen part which is
DDS.createListener((topic) -> listen() /* dunno how to access listen */)
And also to invoce the listen method, I need a class instance but I am not sure how I am gonna handle that. It does not make sense to do Class.newInstance(). Do I need a different kind of configuration?
答案1
得分: 0
你需要在一个包装类中创建一个 register(Object obj)
方法,该方法用于处理主题注册。这个方法需要在具有 subscribe
方法的类的构造函数中被调用。
因此,无论何时有人调用 register(this) 方法,您将获得对象引用,然后您需要找到带有 @Subscribe
注解的方法,并创建一个监听器,该监听器将使用反射调用给定的方法。
还有其他方法,但这似乎是最简单的方式。
英文:
You need to create register(Object obj) method in a wrapper class which handles your topic registration. This needs to be called in constructor of class where you have subscribe method.
so whenever some one calls register(this) method you will get object reference and you need to find @Subscribe annotated method and create listener which will call given method using reflection.
There other ways but this seems to be easiest
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论