2014-01-28 71 views
9

我可以以某种方式在一个抽象类上分组一组注释,并且扩展此类的每个类都自动分配了这些注释?继承抽象类的注释吗?

至少以下不工作:

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


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

我认为'PersonService'仍然需要注释为@ @ Service'。但方法即使在重写时也会保留其注释。 –

回答

14

答案是:没有

Java注解是不能继承的,除非该注释类型的上面有@Inherited元注释:https://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html

Spring的@Component注释does not have @Inherited on it,所以您需要将注释放在每个组件类上。 @Service,@Controller和@Repository都不是。

+0

链接到文档是死的 – denov

+0

谢谢。我修好了它。你可以做到这一点;-) –

+0

cmon @denov,下次再付出一些努力:) –

1

我有这样一段代码在我的项目,它工作得很好,尽管它没有被标注为服务:

public abstract class AbstractDataAccessService { 

    @Autowired 
    protected GenericDao genericDao; 


} 

@Component 
public class ActorService extends AbstractDataAccessService { 

    // you can use genericDao here 

} 

所以你不需要把注释放在你的抽象类上,但即使你做了你,生病必须在所有子类上注释为@Component@Service注释不会被继承。

5

简短的回答是:在你的例子中提到的注释,没有

长答案:有一个元注释java.lang.annotation.Inherited。如果一个注解本身是用这个注释注释的,那么当一个类用它注释时,它的子类也会自动用它的注释来注释它。

然而,如可以在弹簧源代码中所见,@Service@Scope注释本身不与@Inherited注释,所以@Service@Scope一类的存在不被它的子类继承。

也许这是可以在春季修复的东西。