通过注释调用不同的方法
2013-07-16 09:19
260 查看
ExampleMessageHandler里有被注释的方法,所以要把这个对象传给MessageService,以便通过反射调用该对象上的方法
源代码:http://pan.baidu.com/share/link?shareid=2046197387&uk=3878681452
原文:http://javaeenotes.blogspot.com/2011/12/annotated-callback-methods-in-custom.html
package com.javaeenotes; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // Only usable on methods. @Target(ElementType.METHOD) // Annotation must be available during runtime. @Retention(RetentionPolicy.RUNTIME) public @interface MessageMethod { MessageType messageType() default MessageType.NORMAL; }
package com.javaeenotes; import java.lang.reflect.Method; public class MessageServiceImpl implements MessageService { private Object messageHandler; @Override public void registerMessageHandler(Object messageHandlerObject) { messageHandler = messageHandlerObject; } @Override public void sendMessage(String message, MessageType messageType) throws Exception { for (Method method : messageHandler.getClass().getMethods()) { if (method.isAnnotationPresent(MessageMethod.class)) { MessageMethod messageMethod = method.getAnnotation(MessageMethod.class); if (messageMethod.messageType() == MessageType.NORMAL && messageType == MessageType.NORMAL) { method.invoke(messageHandler, message); } else if (messageMethod.messageType() == MessageType.URGENT && messageType == MessageType.URGENT) { method.invoke(messageHandler, message); } } } } }
package com.javaeenotes; public class KMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // Create message service and register message handler. MessageService messageService = new MessageServiceImpl(); messageService.registerMessageHandler( new ExampleMessageHandler()); try { // Sending test messages through the message service. messageService.sendMessage("This is a normal message.", MessageType.NORMAL); messageService.sendMessage("This is an urgent message!", MessageType.URGENT); } catch (Exception e) { e.printStackTrace(); } } }
源代码:http://pan.baidu.com/share/link?shareid=2046197387&uk=3878681452
原文:http://javaeenotes.blogspot.com/2011/12/annotated-callback-methods-in-custom.html
相关文章推荐
- 通过调用类中的各种方法我们可以获取不同的时间
- C#多线程-不同线程之间通过事件委托封送调用方法(转)
- java通过反射调用不同参数的方法
- ,遇到某个类中有很多相似的方法,区别只是后缀不同,可以通过这个方法,实现拼接方法名而调用方法
- 通过调用System.getProperty()方法来获得不同环境变量的值。
- java通过反射调用不同参数的方法
- 【HTML】通过不同的分辨率调用不同的css,两种方法:css本身判断、js调用css
- C#多线程-不同线程之间通过事件委托封送调用方法
- C#多线程-不同线程之间通过事件委托封送调用方法
- linux下通过模板在创建线程时, 在回调函数中调用不同的类方法
- C#多线程-不同线程之间通过事件委托封送调用方法
- C#多线程-不同线程之间通过事件委托封送调用方法
- 通过img标签调用实现静态页面访问次数统计的简单方法
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
- 通过servlet封装不同应用之间的访问方法
- Lua的系统学习(杂)_通过Lua调用C#方法(热更新最直观的原理理解)_简单的随机数实现
- Java_反射应用_通过Java反射调用方法
- Graphics->Clipping Canvas提供了ClipPath, ClipRect, ClipRegion 等方法来裁剪,通过Path, Rect ,Region 的不同组合,Androi
- 通过bindservice调用服务内部方法
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)