[Day 25 | Spring] 스프링 빈설정 방법

y♡ding·2024년 11월 15일
0

데브코스 TIL

목록 보기
159/163

Spring Framework 학습 노트


1. BeanPostProcessor

BeanPostProcessor는 스프링 빈의 생명주기 동안 빈 초기화 전후에 커스텀 로직을 추가할 수 있는 인터페이스입니다.

코드 설명
  • postProcessBeforeInitialization: 빈이 초기화되기 에 실행됩니다.
  • postProcessAfterInitialization: 빈이 초기화된 에 실행됩니다.
package org.example.lifecycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("7. 초기화 전의 빈에 대한 처리");
        return bean; // 처리 후 빈 반환
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("10. 초기화 후의 빈에 대한 처리");
        return bean; // 처리 후 빈 반환
    }
}
XML 설정
<bean id="writeAction" class="org.example.lifecycle.WriteAction" init-method="init_method" destroy-method="destroy_method">
    <property name="writer">
        <value>홍길동</value>
    </property>
</bean>

<bean class="org.example.lifecycle.CustomBeanPostProcessor"/>

2. 빈 이름 설정

스프링에서 빈의 이름은 기본적으로 메서드명 또는 XML 설정에서 명시된 ID를 사용합니다. 하지만 @Bean 어노테이션을 통해 빈 이름을 변경할 수 있습니다.

코드 설명
package org.example.di01;

import org.springframework.context.annotation.Bean;

public class BeanConfig {
    @Bean
    public HelloBean1 helloBean1() {
        return new HelloBean1();
    }

    @Bean(name = "customHelloBean") // 빈 이름을 직접 설정
    public HelloBean1 helloBean3() {
        return new HelloBean1();
    }
}
주요 특징
  1. 빈 이름의 기본값: 메서드명(helloBean1)
  2. 사용자 정의 이름: @Bean(name = "customHelloBean")
사용 예제
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfig.class);

// 기본 메서드명으로 빈 조회
HelloBean1 helloBean1 = ctx.getBean("helloBean1", HelloBean1.class);

// 사용자 정의 이름으로 빈 조회
HelloBean1 customHelloBean = ctx.getBean("customHelloBean", HelloBean1.class);

ctx.close();

3. 생성자 주입

스프링 빈을 생성할 때 생성자 주입을 사용하면 객체 생성 시 필요한 값을 전달할 수 있습니다.

코드 설명
package org.example.di03;

import org.springframework.context.annotation.Bean;

public class BeanConfig {
    @Bean
    public HelloBean helloBean1() {
        // 기본 생성자
        return new HelloBean();
    }

    @Bean
    public HelloBean helloBean2() {
        // 파라미터 생성자 호출
        return new HelloBean("홍길동");
    }
}
HelloBean 클래스
package org.example.di03;

public class HelloBean {
    private String name;

    // 기본 생성자
    public HelloBean() {
        this.name = "기본 이름";
    }

    // 파라미터 생성자
    public HelloBean(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("안녕하세요, " + name + "입니다.");
    }
}
사용 예제
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfig.class);

// 기본 생성자를 사용한 빈
HelloBean helloBean1 = ctx.getBean("helloBean1", HelloBean.class);
helloBean1.sayHello(); // 출력: 안녕하세요, 기본 이름입니다.

// 파라미터 생성자를 사용한 빈
HelloBean helloBean2 = ctx.getBean("helloBean2", HelloBean.class);
helloBean2.sayHello(); // 출력: 안녕하세요, 홍길동입니다.

ctx.close();
장점
  1. 의존성 명시: 객체 생성 시 필요한 값 또는 의존성을 명확히 전달할 수 있습니다.
  2. 불변성 보장: 객체 생성 이후에는 값 변경이 불가능하여 안정성이 향상됩니다.

0개의 댓글

관련 채용 정보