Can I somehow group a set of annotations on an abstract class, and every class that extends this class has automatically assigned these annotations?
At least the following does not work:
@Service @Scope(value = BeanDefinition.SCOPE_PROTOTYPE) class AbstractService class PersonService extends AbstractService { @Autowired //will not work due to missing qualifier annotation private PersonDao dao; }
The answer is: no
Java annotations are not inherited unless the annotation type has the @Inherited meta-annotation on it: https://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html.
Spring's @Component
annotation does not have @Inherited on it, so you will need to put the annotation on each component class. @Service, @Controller and @Repository neither.
The short answer is: with the annotations that you mentioned in your example, no.
The long answer: there is a meta-annotation called java.lang.annotation.Inherited
. If an annotation itself is annotated with this annotation, then when a class is annotated with it, its subclasses are also automatically annotated with it by implication.
However, as you can see in the spring source code, the @Service
and @Scope
annotation are not themselves annotated with @Inherited
, so the presence of @Service
and @Scope
on a class is not inherited by its subclasses.
Maybe this is something that can be fixed in Spring.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With