Inherit annotations from abstract class?

后端 未结 3 1054
Happy的楠姐
Happy的楠姐 2020-12-06 09:40

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 fol

相关标签:
3条回答
  • 2020-12-06 10:05

    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.

    0 讨论(0)
  • 2020-12-06 10:12

    I have this piece of code in my project and it works just fine, although it's not annotated as Service:

    public abstract class AbstractDataAccessService {
    
        @Autowired
        protected GenericDao genericDao;
    
    
    }
    

    and

    @Component
    public class ActorService extends AbstractDataAccessService {
    
        // you can use genericDao here
    
    }
    

    So you don't need to put annotation on your abstract class but even if you do you will still have to put annotation on all subclass as @Component or @Service annotations are not inherited.

    0 讨论(0)
  • 2020-12-06 10:24

    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.

    0 讨论(0)
提交回复
热议问题