log.info("문자 info={}", sparta); // 문자 info=sparta
// 중괄호가 sparta로 치환되어 로그 출력
// 이 형식의 로그 출력 권장
log.info("문자 info " + sparta); // 문자 info sparta
// 해당 레벨의 로그를 출력하지 않는 상황에서도 문자열의 '+' 연산은 수행됨
// -> 불필요한 작업 발생
@Indexed
해당 클래스가 컴포넌트 스캔 대상으로 Spring Bean에 더 빠르게 등록되도록 돕는 어노테이션
@Target
어노테이션이 적용될 수 있는 대상(위치)을 지정하는 메타 어노테이션
특정 어노테이션을 특정 위치에서만 사용하도록 제한할 때 @Target 사용 -> 사용자 지정 어노테이션에 주로 사용
ElementType Enum의 속성을 인자로 둠
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.TYPE) // 클래스, 인터페이스, enum에만 적용 가능
public @interface ClassOnlyAnnotation {
}
@ClassOnlyAnnotation
public class MyClass { }
// ❌ 오류: 필드에는 적용 불가능
@ClassOnlyAnnotation
private String name;
@Retention
얼마나 오래 유지되는지를 결정하는 메타 어노테이션
RetentionPolicy Enum의 속성을 인자로 둠
CLASS는 주석과 같은 기능
@Documented
Javadoc 등의 문서화 도구에 의해 문서화되어야 함을 나타내는 메타 어노테이션
@PathVariable
@PathVariable로 설정된 경로 변수(`user/{id}`)는 반드시 값을 가져야 하며, 값이 없으면 응답 상태 코드 404가 발생
@RequestMapping("/posts")
@RestController
public class PathVariableController {
// postId로 된 post 단건 조회
@GetMapping("/{postId}")
public String pathVariableV1(@PathVariable("postId") Long data) {
// logic
String result = "PathvariableV1 결과입니다 : " + data;
return result;
}
}
@RequestMapping("/posts")
@RestController
public class PathVariableController {
// 변수명과 같다면 @PathVariable의 매개변수 생략가능
@GetMapping("/{postId}")
public String pathVariableV2(@PathVariable Long postId) {
// logic
String result = "PathvariableV2 결과입니다 : " + postId;
return result;
}
}
@RestController
public class PathVariableController {
@GetMapping("/{postId}/comments/{commentId}")
public String pathVariableV3(
@PathVariable Long postId,
@PathVariable Long commentId) {
// logic
String result = "PathvariableV3 결과입니다 postId : " + postId + "commentsId : " + commentId;
return result;
}
}
특정 파라미터 매핑
package com.example.springbasicannotation.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParameterController {
// parms 속성값 추가
@GetMapping(value = "/users", params = "gender=man")
public String params() {
// logic
String result = "params API가 호출 되었습니다.";
return result;
}
}
http://localhost:8080/users?gender=man <- 쿼리 스트링이 params대로 작성되어야 호출 가능