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