[JAVA] @Component Annotation

다 은·2024년 6월 26일

JAVA

목록 보기
13/14
post-thumbnail

저번 글을 쓰게 된 이유...! Spring boot에서 여러 액션을 처리하기 전에 Rq 객체를 더 확실하게 처리하게 하기 위해서 BeforeActionInterceptor 클래스를 생성하였다.

이걸 처리해주는 과정에서 클래스에 @Component 어노테이션을 작성해주지 않아서 Bean으로 등록되지 않았다. 오류는 어노테이션을 지정해주어서 간단하게 처리할 수 있었지만 그렇다면 @Component 어노테이션은 어떤 역할을 하며, Bean은 또 어떤 역할을 하는 지 알아보자..!

Spring Bean 👽

Bean, Spring IoC(제어의 역전, Inversion Of Control) 컨테이너에 의해 생성되고 관리되는 자바 객체를 빈(Bean)이라고 한다. 기존의 자바 프로그래밍에서는 클래스를 생성하고, 원하는 객체를 직접 new를 사용하여 생성한 후 사용했다. 하지만 Spring 에서는 직접 생성해낸 객체가 아니라 Spring에 의하여 관리당하는 자바 객체를 사용한다. 이 때 사용하는 자바 객체를 Bean 이라고 한다.

Spring IoC (제어의 역전, Inversion Of Control) 👽

IoC는 스프링의 특징 중 하나로, 객체의 생성과 관리를 개발자가 직접하는 것이 아닌! 외부에서 대신 해주는 것을 말한다. IoC는 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 한다.

@Component 👽

@Component 어노테이션은 개발자가 생성한 클래스를 Bean으로, 즉 IoC가 관리하는 자바 객체로 등록하고 싶을 때 사용하는 어노테이션이다.

아래는 BeforeActionInterceptor 클래스의 코드이다. 클래스를 생성해주는 과정에서 @Component 어노테이션을 지정하주지 않아서 생성한 rq 객체가 다른 클래스에서 사용하려고 할 때에 제대로 적용되지 않았다.

package com.example.demo.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import com.example.demo.vo.Rq;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@Component
public class BeforeActionInterceptor implements HandlerInterceptor{
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {

		Rq rq = new Rq(request, response);

		request.setAttribute("rq", rq);

		return HandlerInterceptor.super.preHandle(request, response, handler);
	}
}

🌐 참고 사이트
➡️ 스프링(Spring)에서 자주 사용하는 Annotation 개념 및 예제 정리
➡️ [Spring DI/IoC] IoC? DI? 그게 뭔데?

0개의 댓글