▶코드에 사용되는 어노테이션들
어노테이션 분류
Lombok관련 어노테이션 |
Spring관련 어노테이션 |
Test관련 어노테이션 |
@Setter @Data @Log4j |
@Autowired @Component |
@RunWith @ContextConfiguration @Test |
Lombok관련
Lombok= 컴파일 시 코드를 작성하는 기능들을 완성해주라는 라이브러리.@Setter=setter메서드를 만들어주(생성해주는)는 역할
@Setter에는 3가지의 속성 부여가능
속성명 |
의미 |
value |
접근 제한 속성을 의미함. 기본값은 lombokAccessLevel.PUBLIC |
onMethod |
setter메서드의 생성 시 메서드에 추가할 어노테이션을 지정함 예제는 @Atowired라는 어노테이션이 지정되도록 작성 되어있음 코드는 특이하게 '_'표기가 사용되는데 JDK버전에 따라 차이가 있음. up to JDK7: @Setter(onMethod=@_({@AnnotationsGoHere})) from JDK8: @Setter(onMethod_=({@AnnotationsGoHere})) //note the nuderscore after onMethod |
onParam |
setter메서드의 파라미터에 어노테이션을 사용하는 경우에 적용합니다 |
@Data는 Lombok에서 가장 자주 사용됨.
그리고 @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor, @ToString결합 형태로 한번에
자주 사용되는 모든 메서드들을 생성할 수 있는 장점을 갖고 있음.(세부적인 설정이 필요없다면 @Data를 사용)
@Log4j는 로그객체를 생성하게 됨. 그리고 @Log4j 설정을 이용하고 @Log4j가 존재하지 않을 경우에는 @Log를 이용할 수 있음.
작성코드는 달라 질 수가 있음.
1 2 3 4 | @Log public class LogEx { } | cs |
클래스변환 후
1 2 3 4 5 | public class LogEx { private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogEx.class.getName()); } | cs |
@Log 사용
@Log 를 클래스 쪽에 붙이면 내부적으로 static final로 Logger 객체가 생성됨. 별도 설정이 필요없이 필요한 코드를 만들 수 있다
Spring 관련
@Component는 해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상임을 명시하는것.
예제의 경우 @Component가 있는 클래스를 스프링이 읽어주도록 @ComponentScan을 통해서 지정되어 있으므로 해당패키지에 있는 클래스들을 조사하면서 @Component가 존재하는 클래스들을 객체로 새성해서 빈으로 관리하게 됨.
@Atuowired는 스프링 내부에서 자신이 특정한 객체에 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 표시. 예제에서 Restaurant객체는 Chef타입의 객체가 필요하다는 것을 명시.내부에 관리되는 객체(들) 중에 적당한 것이 있는지를 확인하고 ,자동 주입 해줌.
1 2 3 4 5 6 7 8 9 | @Component @Data public class Rastaurant { @Setter(onMethod_ = @Autowired) private Chef chef; } | cs |
필요한 객체가 존재하지 않으면 스프링은 제대로 구성할 수 없기 때문에 에러가 발생함.
예를 들어
1 2 3 4 5 6 7 | //@Component @Data public class Chef { } | cs |
Chef클래스에 @Conponent가 없다면 스프링은 Chef 객체를 스프링엥서 관리하지 않게 되고 , 따라서 실행 시 아래와 같이 Chef타입의 객체가 없어서 제대로 실행이 안됨.
1 2 3 | Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.zeorck.sample.Chef' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} | cs |
'코드로배우는 스프링 웹 프로젝트 ' 카테고리의 다른 글
스프링과 Oracle Datadase연동3-1 (0) | 2018.12.12 |
---|---|
스프링특징과 의존성주입2-5 (0) | 2018.12.12 |
sts설정과 Eclipse 스프링 프러그인 설치 (0) | 2018.12.07 |
이거부터!! 버전 부터 맞추고 (0) | 2018.12.07 |
스프링의 특징과 의존성 주입2-3 (0) | 2018.10.20 |