본문 바로가기

BE & Spring

Spring에서 Bean 등록하는 2가지 방법

Spring에서는 객체를 직접 생성하는 대신 스프링 컨테이너에 Bean으로 등록하고 관리할 수 있다.

이를 통해 의존성 주입(DI, Dependency Injection)이 가능해지고, 객체 간의 결합도를 낮출 수 있다.

 

Spring에서 Bean을 등록하는 방법은 크게 2가지가 있다.

1. 컴포넌트 스캔(Component Scan)

2. 자바 코드로 직접 등록(@Configuration, @Bean 사용)

 

하나씩 살펴보자. 🚀


1️⃣ 컴포넌트 스캔을 이용한 빈 등록

Spring Boot를 실행하면, 특정 패키지 하위에 있는 @Component 어노테이션이 붙은 클래스들을 자동으로 찾아서 빈으로 등록해준다.

 

@Component
public class MyComponent {
    public void hello() {
        System.out.println("Hello from MyComponent!");
    }
}

위 코드처럼 @Component를 클래스에 붙이면, Spring이 자동으로 스캔해서 빈으로 등록한다.

 

@Component를 포함하는 주요 어노테이션

어노테이션 역할
@Controller MVC의 Controller 역할 (웹 요청 처리)
@Service 비즈니스 로직 담당
@Repository 데이터 접근 계층 (DAO)
@Component 그 외 일반적인 Bean

 

즉, 우리가 @Service, @Repository 같은 어노테이션을 붙이면, 자동으로 @Component의 기능을 하게 되어 빈으로 등록된다.


스프링 빈 간의 의존관계 주입 (DI)

Spring이 관리하는 Bean끼리는 생성자 주입을 통해 연결할 수 있다.

@Component
public class MyService {
    public String getMessage() {
        return "Hello from MyService!";
    }
}

@Component
public class MyController {
    private final MyService myService;

    @Autowired
    public MyController(MyService myService) { // 생성자 주입
        this.myService = myService;
    }

    public void printMessage() {
        System.out.println(myService.getMessage());
    }
}

 

💡 @Autowired를 사용하면, Spring이 MyService 객체를 찾아서 자동으로 주입해준다.

하지만, 스프링 컨테이너에 등록된 객체에만 동작하므로 주의!


2️⃣ 자바 코드로 직접 스프링 빈 등록 (@Bean 사용)

컴포넌트 스캔을 사용하지 않고, 직접 Java 코드로 Bean을 등록할 수도 있다.

 

이 방법은 외부 라이브러리처럼 우리가 직접 수정할 수 없는 클래스를 빈으로 등록할 때 유용하다.

 

@Configuration // 스프링 설정 파일로 사용
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }

    @Bean
    public MyController myController(MyService myService) {
        return new MyController(myService);
    }
}

 

💡 @Configuration이 붙은 클래스에서 @Bean 메서드를 선언하면, 해당 객체를 Spring 컨테이너에서 관리하는 Bean으로 등록할 수 있다.

 

이제 AppConfigMyServiceMyController를 스프링 컨테이너에 등록해준다.

 


✅ 컴포넌트 스캔 vs. @Bean 직접 등록, 언제 사용할까?

방식 장점 단점 추천 사용 상황
컴포넌트 스캔 (@Component) 자동 등록으로 편리 설정이 필요 없는 단순 클래스에 적합 대부분의 경우 권장
자바 코드 직접 등록 (@Bean) 명확한 설정 가능
외부 라이브러리 등록 가능
직접 설정해야 함 라이브러리 등록
세밀한 제어가 필요할 때

 


🔹 정리

 

Spring에서 Bean을 등록하는 방법은 컴포넌트 스캔(@Component)과 자바 코드(@Bean) 두 가지가 있다!

 

컴포넌트 스캔(@Component, @Service, @Repository, @Controller)

자동으로 Bean을 등록 (일반적인 경우 사용)

 

자바 코드(@Bean 등록)

명시적으로 직접 Bean을 등록 (라이브러리나 특정 설정이 필요할 때 사용)

 

둘 다 스프링 컨테이너에서 관리하는 객체를 만들기 위한 방법이므로, 상황에 맞게 선택하면 된다 😊


let textNodes = document.querySelectorAll("div.tt_article_useless_p_margin.contents_style > *:not(figure):not(pre)"); textNodes.forEach(function(a) { a.innerHTML = a.innerHTML.replace(/`(.*?)`/g, '$1'); });