CallbackOnListener(Object listener, String methodName, Class<?> entityType) throws IllegalArgumentException { if (listener == null) { throw new IllegalArgumentException("Null listener"); } this.callbackMethod = findMethod(listener.getClass(), methodName, entityType); this.listener = listener; }
CallbackOnListener(Object listener, Method method, Class<?> entityType) throws IllegalArgumentException { if (listener == null) { throw new IllegalArgumentException("Null listener"); } if (!verifyMethod(method, entityType)) { throw new IllegalArgumentException("Invalid annotated listener method: " + method.getName()); } this.callbackMethod = method; this.listener = listener; }
private Method findMethod(Class<?> objectClass, String methodName, Class<?> entityType) throws IllegalArgumentException { Method[] methods = objectClass.getDeclaredMethods(); for (Method method : methods) { if (methodName.equals(method.getName()) && verifyMethod(method, entityType)) { return method; } } Class<?> superclass = objectClass.getSuperclass(); if (superclass == null || "java.lang.Object".equals(superclass.getName())) { throw new IllegalArgumentException("Class " + objectClass.getName() + " has no valid listener callback method '" + methodName + "'"); } else { return findMethod(superclass, methodName, entityType); } } }
/** * Registers a callback method to be invoked on a provided non-entity object when a * lifecycle event occurs on any entity that does not suppress default callbacks. */ void addDefaultListener(Object listener, String methodName) { CallbackOnListener callback = new CallbackOnListener(listener, methodName); addDefaultCallback(callback); }
/** * Registers callback method to be invoked on a provided non-entity object when a * lifecycle event occurs. */ void addListener(Class<?> entityClass, Object listener, String methodName) { CallbackOnListener callback = new CallbackOnListener( listener, methodName, entityClass); addCallback(entityClass, callback); }
void addListener(Class<?> entityClass, Object listener, Method method) { CallbackOnListener callback = new CallbackOnListener( listener, method, entityClass); addCallback(entityClass, callback); }