SpringFramework Test Depndency는 Main에서 사용되지 않고 Only Test용도에서만 호출되어서 사용이 됨.
@Configration : Java based Configuration Metadata
@ExtendWith(SpringExtenstion.class) : Jupiter Annotation에서 정의함.
-> 이 확장을 사용함으로써 JUnit5 테스트에서 Spring의 기능(Spring IoC Container)을 완전히 활용할 수 있다.
SpringExtension의 주요기능
-> 의존성 주입지원, Autowired(자동주입)
Autowired : String IoC Container에 의해서 해당 필드 UserDao에 UserDao 빈을 주입함.
-> Spring ApplicationContext = Spring IoC Container
-> context가 변경사항이 있다 가정하였을 때 *DirtiesContext*를 사용해야 한다.(어쩔 수 없이 변경을 할 때 사용을 해라.) : 클래스 레벨에서 사용해야 한다.
@interface = Annotation
String[] value() default {};
->*value라는 속성* : value를 locations
-> String[] value() default {};는 자바에서 주로 애노테이션을 정의할 때 사용되는 구문입니다. 이 구문은 애노테이션의 속성으로 value라는 이름의 배열을 정의하며, 기본값으로 빈 배열을 설정합니다. 이 구문은 애노테이션의 속성 중 하나로, 여러 문자열 값을 받을 수 있도록 설정합니다.
Class<?>[]
-> 뭔지는 모르겠지만 배열(엘리먼트가 클래스 와일드카드 / 어떤 엘리먼트 클래스 객체가 와도 상관없다.)
1. 제너릭 타입:
• Class<?>는 제너릭 타입 Class의 와일드카드 형태로, 구체적인 타입을 명시하지 않고 다양한 타입의 클래스를 수용할 수 있습니다.
2. 배열 타입:
• Class<?>[]는 여러 Class<?> 객체를 담을 수 있는 배열로, 다수의 클래스 타입 정보를 저장할 수 있습니다.
3. 애노테이션에서의 사용:
• 애노테이션의 속성으로 Class<?>[]를 사용하면 여러 클래스 타입을 애노테이션에 전달할 수 있습니다.
@interface DirtiesContext
->
• 테스트 중 컨텍스트 무효화: 테스트가 애플리케이션 컨텍스트에 변화를 일으킬 수 있는 경우, 예를 들어 데이터베이스를 수정하거나 다른 상태를 변경하는 경우, @DirtiesContext를 사용하여 테스트 후 컨텍스트를 무효화할 수 있습니다.
• 테스트의 독립성 보장: @DirtiesContext를 사용하면 각 테스트가 독립적으로 실행될 수 있도록 보장할 수 있습니다. 즉, 하나의 테스트가 애플리케이션 컨텍스트를 수정하더라도 다른 테스트에 영향을 미치지 않습니다.
Annotoation을 위한 정보를 가지는 Annotation을 MetaAnnotation이라고 함.
@Target
->
• ElementType.TYPE: 클래스, 인터페이스, 열거형 또는 애노테이션 타입에 적용됩니다.
• ElementType.FIELD: 필드에 적용됩니다.
• ElementType.METHOD: 메서드에 적용됩니다.
• ElementType.PARAMETER: 메서드 또는 생성자의 매개변수에 적용됩니다.
• ElementType.CONSTRUCTOR: 생성자에 적용됩니다.
• ElementType.LOCAL_VARIABLE: 지역 변수에 적용됩니다.
• ElementType.ANNOTATION_TYPE: 애노테이션 타입에 적용됩니다.
• ElementType.PACKAGE: 패키지 선언에 적용됩니다.
@AliasFor : Location을 위한 별명
-> @AliasFor는 Spring Framework에서 애노테이션의 속성을 별칭(alias)으로 지정하는 데 사용됩니다. 이 애노테이션은 주로 애노테이션 속성의 기본값을 설정하거나, 두 속성 간에 별칭을 지정하여 유연성을 제공하는 데 유용합니다. 이를 통해 애노테이션의 속성 간의 관계를 정의하고, 애노테이션 사용을 더 간결하게 할 수 있습니다.
오브젝트 = 인스턴스
자바 기반의 컨피규레이션 메타데이터 (Java-Based Configuration)
자바 기반의 컨피규레이션은 @Configuration 애너테이션이 붙은 자바 클래스를 사용하여 설정을 정의합니다. 이 방법은 XML 기반의 설정 파일 대신 자바 클래스를 사용하여 설정을 구성할 수 있도록 해줍니다.
특징:
1. 타입 안전성: 컴파일 타임에 타입 체크가 이루어지므로, 잘못된 설정에 대한 오류를 조기에 발견할 수 있습니다.
2. 자동 완성: IDE에서 자동 완성 기능을 제공하여 설정을 쉽게 작성할 수 있습니다.
3. 자바 코드의 이점: 자바 언어의 기능을 활용하여 복잡한 로직을 설정에 포함시킬 수 있습니다.
4. 모듈화: 설정을 모듈화하여 유지 보수성을 높일 수 있습니다.
어노테이션 기반의 컨피규레이션 (Annotation-Based Configuration)
어노테이션 기반의 컨피규레이션은 Spring 애플리케이션에서 사용되는 다양한 어노테이션을 통해 설정을 정의합니다. 이 방법은 애플리케이션의 클래스와 메서드에 직접 어노테이션을 붙여서 설정을 구성합니다.
특징:
1. 단순함: 설정을 클래스와 메서드에 직접 어노테이션으로 정의하므로 설정이 직관적입니다.
2. 자동 구성: @Component, @Service, @Repository, @Controller 등과 같은 어노테이션을 통해 Spring 컨테이너가 자동으로 빈을 구성하고 관리합니다.
3. 커스터마이징: 빈의 설정을 세부적으로 조정할 수 있는 다양한 어노테이션을 제공합니다.
4. 유연성: 어노테이션을 통해 다양한 설정을 손쉽게 조정할 수 있습니다.
리플랙션은 Excess Modifier를 무시해버린다.
인터페이스도 .class를 붙인다
'Note-Taking' 카테고리의 다른 글
Annotation-based Container Configuration과 Java-based Container Configuration 정리 (0) | 2024.09.03 |
---|---|
Instrumentation API 정리 (0) | 2024.09.03 |
Java 클래스 구조 정리 (0) | 2024.08.07 |
Dependency Injection,CGLIB 정리 (0) | 2024.08.06 |
Java의 기본 정리 (0) | 2024.08.05 |