您的位置:首页 > 其它

通过注释调用不同的方法

2013-07-16 09:19 260 查看
ExampleMessageHandler里有被注释的方法,所以要把这个对象传给MessageService,以便通过反射调用该对象上的方法

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐