Java – can’t inherit @ component in spring?

In my project, there is a common base class, and all client classes are extended There is an @ Autowired field, which needs to be injected by hibernate These are grouped in another class that has the @ Autowired collection of the base class

In order to reduce the template of client code, I try to make @ component inherit Since @ component does not do this by default (obviously it used to though), I created this workaround annotation

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
@Inherited
public @interface InheritedComponent {
}

... and annotate the base class with it It's not beautiful, but I hope it will work Unfortunately not, it really puzzles me because @ inherited should make it work

Is there any other way to inherit @ component? Or do I just need to say that any class that extends the base class needs this template?

Solution

The problem is that the Component annotation type itself needs to be marked with @ inherited

Your @ inheritedcomponent annotation type is correctly inherited by any class that extends the superclass, which is marked as @ inheritedcomponent, but does not inherit @ component This is because you have @ component on the annotation, not the parent type

An example:

public class InheritedAnnotationTest {

    @InheritedComponent
    public static class BaseComponent {
    }

    public static class SubClass extends BaseComponent {
    }

    public static void main(String[] args) {
        SubClass s = new SubClass();

        for (Annotation a : s.getClass().getAnnotations()) {
            System.out.printf("%s has annotation %s\n",s.getClass(),a);
        }
    }
}

Output:

In other words, when a class has any annotations, the annotations of the annotations are not resolved – they do not apply to the class, only to the annotations (if meaningful)

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>