栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用背后的代码创建自定义注释

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用背后的代码创建自定义注释

我建议阅读此博客条目(archive.org上的快照),直到作者记得他可以使用Spring的组件扫描功能为止。

最初的问题是扫描类路径以查找具有自定义批注的类。完成此操作后,您将在独立应用程序中拥有对象,通过使用

object.getClass().getAnnotations()
,您可以将需要添加到包含自定义批注的对象中的侦听器或自定义行为注入。

假设您具有以下自定义注释:

@Target({ ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)public @interface MyMessageDriven {}

然后在应用程序中使用某些类:

@MyMessageDrivenpublic class MyObject {}

现在,在应用程序中的适当位置,您应该有一个方法可以给出所有带有

MyMessageDriven
以下内容的类:

Set<Class<?>> findAllMessageDrivenClasses() {  final StopWatch sw = new StopWatch();  sw.start();  final Reflections reflections = new Reflections("org.projectx", new TypeAnnotationsScanner());  Set<Class<?>> allMessageDrivens = reflections.getTypesAnnotatedWith(MyMessageDriven.class); // NOTE HERE  sw.stop();  return allMessageDrivens;}

有了这个,我假设您的应用程序中有一点(1)您可以访问应用程序中的对象,或者(2)应用程序中所有对象上都有访问者或迭代器模式。因此,在某种程度上,我假设我们所有目标对象都为

objects

Set<Class<?>> msgDrivenClasses = findAllMessageDrivenClasses();for (Object o : objects) {  if (msgDrivenClasses.contains(o.getClass()) {    invokeTheMessageListener(o);  }}

另一方面,

MyMessageListener
MyMessageDriven
找到具有的对象时,应该可以使用一些实现:

void invokeTheMessageListener(Object o) {  theMessageListener.onMessage(o);}

此答案是根据博客条目量身定制的,因此请参考博客以获取库的配置。最后但并非最不重要的一点是,这是该问题的示例代码,可以将其重构为更兼容模式和优雅的样式。

更新 :有一个要求, 目标
对象应了解其自己的侦听器。因此,我建议采用以下方法。让我们有一个接口

MyMessageListenerAware

interface MyMessageListenerAware {  MyMessageListener getMyMessageListener();}// and this is the original MyMessageListenerinterface MyMessageListener {  void onMessage(Object o);}

现在,目标对象应实现上述接口:

class MySampleObject implements MyMessageListenerAware {  public MyMesssageListener getMyMessageLisener() {    return mySampleObjectImplementationOfMyMessageListener;  }}

有了这个,方法

invokeTheMessageListener
就变成了:

void invokeMessageListener(Object o) {  if (o instance MyMessageListenerAware) {    MyMessageListener l = ((MyMessageListenerAware) o).getMyMessageListener();    l.onMessage(o);  }}

虽然
,但我强烈建议阅读有关访问者或策略模式的信息。在我看来,您想要做的事情似乎是您需要某些对象对应用程序中的常见对象/事件做出反应/动作/过程,但
每个 对象 都有 自己的解释/算法/实现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497492.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号