001/* 002 * Copyright 2002-2018 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * https://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.context.event; 018 019import org.springframework.context.ApplicationEvent; 020import org.springframework.context.ApplicationListener; 021import org.springframework.core.Ordered; 022import org.springframework.core.ResolvableType; 023import org.springframework.lang.Nullable; 024 025/** 026 * Extended variant of the standard {@link ApplicationListener} interface, 027 * exposing further metadata such as the supported event and source type. 028 * 029 * <p>As of Spring Framework 4.2, this interface supersedes the Class-based 030 * {@link SmartApplicationListener} with full handling of generic event types. 031 * 032 * @author Stephane Nicoll 033 * @since 4.2 034 * @see SmartApplicationListener 035 * @see GenericApplicationListenerAdapter 036 */ 037public interface GenericApplicationListener extends ApplicationListener<ApplicationEvent>, Ordered { 038 039 /** 040 * Determine whether this listener actually supports the given event type. 041 * @param eventType the event type (never {@code null}) 042 */ 043 boolean supportsEventType(ResolvableType eventType); 044 045 /** 046 * Determine whether this listener actually supports the given source type. 047 * <p>The default implementation always returns {@code true}. 048 * @param sourceType the source type, or {@code null} if no source 049 */ 050 default boolean supportsSourceType(@Nullable Class<?> sourceType) { 051 return true; 052 } 053 054 /** 055 * Determine this listener's order in a set of listeners for the same event. 056 * <p>The default implementation returns {@link #LOWEST_PRECEDENCE}. 057 */ 058 @Override 059 default int getOrder() { 060 return LOWEST_PRECEDENCE; 061 } 062 063}