Actually, this specific case is even worse: The addListener(JobListener) method has been introduced as of Quartz 2.2. On 2.0 and 2.1, only the variant with additional Matcher arguments exists... So we'll have to reflectively detect that, specifically for Quartz 2.x, and pass in an empty List there to enforce the global matcher. There is nothing wrong with always using that method on Quartz 2.x, it seems, so at least we don't have to differentiate between Quartz 2.0, 2.1 and 2.2 there.
Indeed :-) Seems we have to detect the addJobListener(JobListener, List) variant and pass in an empty List there... So not just use a different method name in quartz2 mode, but also use a different signature.
After diving deeper into the Quartz 2.1.x line, it turns out that those addXListener variants without a matcher argument were actually introduced in Quartz 2.1.4. We'll rely on that in Spring Framework 4.1 then, since Quartz 2.1.4 will be 2.5 years old already when we go 4.1 GA.