39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
![]() |
== Why is this an issue?
|
||
|
|
||
|
Spring provides the `@EventListener` annotation as a simpler alternative to implementing the `ApplicationListener` interface for handling events. The `@EventListener` annotation registers a method as an event handler.
|
||
|
This allows to skip the implementation of the `ApplicationListener` interface, making it easier to handle events.
|
||
|
|
||
|
The `@EventListener` annotation can only be used on methods that have at most one parameter, which should be the specific event that we want to handle.
|
||
|
To listen to several types of events, use the `classes` argument of the `@EventListener` annotation.
|
||
|
|
||
|
This rule raises an issue on all methods annotated with `@EventListener` that have more than one parameter.
|
||
|
|
||
|
== How to fix it
|
||
|
|
||
|
=== Code examples
|
||
|
|
||
|
==== Noncompliant code example
|
||
|
|
||
|
[source,java,diff-id=1,diff-type=noncompliant]
|
||
|
----
|
||
|
@EventListener
|
||
|
void handleEvent(CustomerEvent customerEvent, ExceptionalEvent exceptionalEvent) { // Non compliant, this will cause a runtime error
|
||
|
//... some event handling
|
||
|
}
|
||
|
----
|
||
|
|
||
|
==== Compliant solution
|
||
|
|
||
|
[source,java,diff-id=1,diff-type=compliant]
|
||
|
----
|
||
|
@EventListener(classes = {CustomerEvent.class, ExceptionalEvent.class})
|
||
|
void handleEvent(ApplicationEvent event) { // Only one parameter, of the super type `ApplicationEvent`
|
||
|
//... some event handling
|
||
|
}
|
||
|
----
|
||
|
|
||
|
== Resources
|
||
|
=== Documentation
|
||
|
|
||
|
Spring API - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/event/EventListener.html[@EventListener]
|