본문으로 바로가기

코드에 사용되는 어노테이션들 

어노테이션 분류

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

.예외를 살펴보면 Chef타입의 객체(빈)를 찾을 수 없어서 적어도 1개 이상의 해당 타입 객체가 필요하다고 나오는 것을 볼 수 있음,

@Test
여기서 가장 중요한 어노테이션은 @Configuration임.@Configuration은 스프링이 실행되면서 어떤 정보를 읽어 들여야 하는지를 명시함.
속성으로 
locations를 이용해서 문자열의 배열로 XML설정 파일을 명시할 수도 있고,
 classes 속성으로 @Configuration이 적용된 클래스를 지정해 줄 수도 있음. 
@Runwith는 테스트 시 필요한 클래스를 지정함.(스프링은 SpringjUnit4ClassRunwith클래스가 대상이 됨.)
@Test는 junit에서 해당 메서드가 jUnit상에서 단위 테스트의 대상인지 안려줌.


여기만 봐서는 이해가 안되실  수 있지만 코드로 배우는 웹 프로젝트 책을 기반으로 글을썼기때문에 앞 예제를 하고 보시면 이해가 빠릅니다.