Разница между аннотациями SOURCE и RUNTIME в Java заключается в их доступности на разных этапах жизненного цикла программы: 1
Таким образом, SOURCE используется, когда аннотация нужна только для проверки ошибок во время компиляции, как это делает @Override, а RUNTIME — когда аннотация нужна для обеспечения функциональности в рантайме, например, @Test в JUnit. 2