복붙노트

[SPRING] 추상 클래스의 주석을 상속합니까?

SPRING

추상 클래스의 주석을 상속합니까?

어쨌든 추상적 인 클래스에 주석 집합을 그룹화 할 수 있습니까?이 클래스를 확장하는 모든 클래스가 이러한 주석을 자동으로 할당 했습니까?

적어도 다음은 작동하지 않습니다.

@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. ==============================

    1.대답은 '아니오

    대답은 '아니오

    Java 주석은 주석 유형에 @Inherited 메타 주석이 없으면 상속되지 않습니다. https://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html.

    Spring @Component 어노테이션에는 @Inherited가 없기 때문에 각 컴포넌트 클래스에 어노테이션을 넣어야한다. @Service, @Controller 및 @Repository도 아닙니다.

  2. ==============================

    2.짧은 대답은 다음과 같습니다. 예에서 언급 한 주석이 있으면 안됩니다.

    짧은 대답은 다음과 같습니다. 예에서 언급 한 주석이 있으면 안됩니다.

    긴 대답 : java.lang.annotation.Inherited라는 메타 주석이 있습니다. 어노테이션 그 자체가이 어노테이션으로 어노테이션을 작성한 경우, 클래스에 어노테이션이 추가되면, 그 서브 클래스도 함축적으로 자동적으로 그 어노테이션이 붙습니다.

    그러나 스프링 소스 코드에서 볼 수 있듯이 @Service 및 @Scope 주석에는 @Inherited가 주석으로 표시되지 않으므로 클래스의 @Service 및 @Scope가 하위 클래스에 상속되지 않습니다.

    어쩌면 이것이 Spring에서 고칠 수있는 것입니다.

  3. ==============================

    3.내 프로젝트에이 코드 조각이 있는데, 서비스로 주석을 달지는 않았지만 제대로 작동합니다.

    내 프로젝트에이 코드 조각이 있는데, 서비스로 주석을 달지는 않았지만 제대로 작동합니다.

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

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

    따라서 추상 클래스에 주석을 넣을 필요는 없지만 그렇게해도 @Component 또는 @Service 주석이 상속되지 않는 모든 하위 클래스에 주석을 추가해야합니다.

  4. from https://stackoverflow.com/questions/21409338/inherit-annotations-from-abstract-class by cc-by-sa and MIT license