티스토리 뷰

0. Bean 등록

0.1 자동 등록 방식

:: Spring Container 내 싱글톤 객체로 이미 등록되어 있음(ApplicationContext가 이미 만듦)

:: @ComponentScan 을 이용하여 애너테이션이 붙은 클래스를 자동으로 스캔 및 등록


 

1. @ComponentScan + @Component 를 통한 등록 (Package 지정 가능)

    :: @ComponentScan을 통해 스캔할 패키지 지정

    :: 해당 패키지 안에 @Component를 함유하는 클래스를 자동으로 Bean 등록

 

2. @Controller, @Service, @Repository 등을 통한 등록

    :: @Component 에 특정 역할을 가진 Bean을 구분하기 위해 사용

  • 해당 애노테이션을 "스테리오 타입(stereo type)"
    • @Component: 일반적인 빈을 정의하는 애너테이션.
    • @Service: 서비스 레이어의 빈을 정의할 때 사용.
    • @Repository: 데이터 접근 계층(DAO) 빈을 정의할 때 사용.
    • @Controller: 웹 계층에서 컨트롤러 역할을 하는 빈을 정의할 때 사용

EX)

@Configuration
@ComponentsScan(basePackages = "클래스를 찾을 위치")
public class AppConfig{
	// ...
}

:: @Component Scan을 통해 위의 애너테이션이 붙은 클래스를 자동으로 스캔 및 빈 등록

:: @Configuration은 스프링의 자바 설정 클래스임을 명시

 

@Component  // 빈으로 등록
public class MyService {
    public void performAction() {
        System.out.println("Action performed!");
    }
}
@Service  // 서비스 빈
public class MyServiceImpl implements MyService {
    @Override
    public void performAction() {
        System.out.println("Service action performed!");
    }
}

0.2 수동 등록 방식(@Bean)

1. @Configuration + @Bean을 통한 Bean 등록

:: 자바 애너테이션을 사용하여 스프링 컨텍스트에 객체 인스턴스를 추가하는 방법

:: 자바 기반 설정 사용 시 -> spring이 아닌 자바 기반 빈 생성 방법

:: @Configuration: 해당 클래스가 스프링의 자바 설정 클래스를 나타냄.

:: @Bean 애너테이션이 붙은 메서드는 메서드 이름이 Bean의 ID가 되고, 메서드의 반환이 Bean의 인스턴스가 됨

:: Bean객체를 반환

:: 설정을 자바 코드로 직접 작성해야 할 때 유용하며, 빈 생성 로직을 커스터마이즈 가능

 

EX)

@Configuration  // 자바 설정 클래스
public class AppConfig { // configuration - 컨텍스트에 들어갈 빈 종류 모음
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
        
        // 만약, 같지만 다르게 사용되는 Bean이라면 네이밍 필요
        // var s = new MyServiceImpl();
        // s.setName("MyService1");
        // return s;
    }
    
    @Bean 
    // ...
}

:: 스프링 컨텍스트 인스턴스가 생성될 때, 구성 클래스를 매개변수로 하여, 스프링이 인지하도록 지시

pulbic class Main{
	public static void main(String[] args){
    	var context = new AnnotationConfigApplicationContext(AppConfig.class);
        
        // spring context에서 MyService타입의 빈 참조를 가져옴
        MyService my = context.getBean(MyService.class);
        
        // 만약 중복값이 있다면 setName으로 설정한 이름으로 구분 하여 참조
        // MyService my = context.getBean("My1", MyService.class);
    }
}

 

2. 프로그래밍 방식

:: Spring Container를 직접 사용하여 빈을 등록하는 방법

:: GenericWebApplicationContext 또는 AnnotationConfigApplicationContext와 같은 ApplicationContext를 사용 ->빈 등록

:: @registerBean() 메서드를 사용하여 빈을 추가하는 로직을 재정의

:: 스프링 5이상부터 사용 가능


0.3 방식 비교

특징 @Bean 애너테이션 스테레오타입 애너테이션
빈 제어 생성 개발자의 제어 스프링을 통한 인스턴스 생성, 후 제어 가능
컨텍스트 내
동일 타입 인스턴스 등록
여러 개 추가 가능 하나만 추가 가능
빈 등록 대상 @Bean을 사용한 모든 객체 인스턴스 애플리케이션이 소유한 클래스만
상용구 코드 O :: 생성하는 각 빈에 대해 별도의 메서드 X
사용 예시 @Bean은 자바 설정 파일에서 빈을 명시적으로 정의할 때 사용 @Component, @Service, @Repository, @Controller 등은 주로 자동 스캔을 통해 빈을 등록할 때 사용
주로 사용 하는 경우 세밀한 제어가 필요할 때, 특정 빈의 생성 과정을 명시적으로 설정할 때 사용 간단한 설정과 자동 스캔을 통해 클래스별로 빈을 자동으로 등록하고 싶을 때 사용

 

 


참고

ASAC 7기 수업자료

 

스프링 교과서 - 예스24

스프링 기초 이론부터 스프링 부트, 웹 애플리케이션 구현, 보안 강화, 리팩터링, 테스트까지개발 전반의 내용을 책 한 권에 모두 담았다!이 책의 최종 목표는 스프링을 다양한 예제를 천천히 따

www.yes24.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함