공간정보아카데미

Spring - DI - Bean Annotation / 커스텀 어노테이션 만들어보기

minjava 2025. 9. 1. 19:33

Annotation은 Annotation이다.

변수, 함수, 클래스, 프레임워크, 패키지는 아니다.

주로 Annotation은 마킹용도로 사용한다.

 

코드사이에 특별한 의미, 기능을 수행하도록 하는 기술

프로그램 코드의 일부가 아니라 프로그램에 대한 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법

- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공

- 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공

- 실행시(런타임시) 특정 기능을 실행하도록 정보 제공

자바코드에 대한 메타데이터를 제공하는 문법요소

컴파일러, 런타임, 프레임워크(Spring 등)에 의해 특정 동작을 유발하거나 정보를 제공

@ 기호로 시작하며, 클래스 메서드 필드 등에 붙여서 정보를 부여함

 

사용하기 위한 순서 -->

1.어노테이션 정의

2.클래스에 어노테이션 배치

3.코드 실행 중에 Reflection 이용하여 추가 정보를 획득하여 기능을 실시

 

어노테이션 종류 --> 컴파일러 지시용, 런타임 로직용, 커스텀 어노테이션

@SpringBootApplication

@Configuration

@EnableAutoConfiguration

@ComponentScan
@Component

@Bean

@Autowired

@Controller

@RestController

@Service

@Repository

@Resource

@PreConstruct, @PostConstruct

@PreDestroy

@PropertySource

@Lazy

@Value

@RequestMapping

@CookieValue

@CrossOrigin

@ModelAttribute

@GetMapping

@SessionAttributes

@Valid (InitBinder)

@RequestAttribute

@RequestBody

@RequestHeader

@RequestParam

@RequestPart

@ResponseBody

@PathVariable

@ExceptionHandler(ExceptionClassName.class)

@ControllerAdvice

@RestControllerAdvice

@ResponseStatus

@Transactional

@Cacheable

@CachePut

@CacheEvict

@CacheConfig

@Scheduled

 

<Lombok Annotation>

@NoArgsConstructor

@AllArgsConstructor

@RequiredArgsConstructor

@Getter

@Setter

@ToString

@EqualsAndHashCode

@Builder

@Data

 

<JPA Annotation>

@Entity

@Table

@Id

@Column

@EnableJpaAuditing

 

============================================================================================

어떻게 쓰이는지 함 보자ㅏㅏㅏ

@Retention(RetentionPolicy.RUNTIME)

- 어노테이션을 정의할 때 사용하는 메타 어노테이션 (어노테이션의 동작 방식을 설정하는 것)

- 어노테이션 유지 정책

- source : 컴파일시 제거됨 (컴파일용 지시)

- class(기본값) : .class 파일에 존재하나 런타임엔 사라짐

- RUNTIME : 런타임까지 유지됨. 리플렉션으로 조회 가능

 

@interface 키워드로 커스텀 어노테이션 정의

RUNTIME 유지 정책으로 런타임에서도 어노테이션 정보를 읽을 수 있음

MyClass 클래스 위에 @MyAnnotation 적용 -> 이 클래스는 MyAnnotation 어노테이션이 부착된 클래스

어노테이션 정보 가져와서 출력 -> getClass().getAnnotations(), sysout(annotation)

'공간정보아카데미' 카테고리의 다른 글

[JDBC 커넥션 풀] DBCP2 vs hikariCP vs c3p0  (0) 2025.09.02
Spring-DI-Bean Annotation  (0) 2025.09.02
변수 vs 객체 / stack vs heap  (0) 2025.09.01
Spring - DI - Container  (0) 2025.09.01
java - MyBatis  (0) 2025.08.29