从抽象类继承注释?

23

我是否可以在一个抽象类上进行注释分组,每个继承该类的类都会自动分配这些注释?

至少以下方法无法实现:

@Service
@Scope(value = BeanDefinition.SCOPE_PROTOTYPE)
class AbstractService


class PersonService extends AbstractService {
    @Autowired //will not work due to missing qualifier annotation
    private PersonDao dao;
}

2
我认为 PersonService 仍需要被注释为 @Service。但是,即使在重写方法时,方法仍保留其注释。 - Kuba Spatny
3个回答

39

16

简短的回答是:根据您在示例中提到的注释,不行

长的答案是:有一种元注解称为java.lang.annotation.Inherited。如果一个注释本身带有此注释,则当使用该注释对类进行注释时,其子类也会通过暗示自动注释。

但是,正如您可以在Spring源代码中看到的那样,@Service@Scope注释本身没有被注释为@Inherited,因此类上存在@Service@Scope并不会被其子类继承。

也许这是可以在Spring中修复的问题。


2

我在我的项目中有这段代码,它运行得非常好,尽管它没有被注释为服务:

public abstract class AbstractDataAccessService {

    @Autowired
    protected GenericDao genericDao;


}

并且

@Component
public class ActorService extends AbstractDataAccessService {

    // you can use genericDao here

}

所以您不需要在抽象类上放注释,但即使您这样做,您仍然必须在所有子类上放注释,因为 @Component@Service 注释不会被继承。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接