@Bean
어노테이션으로 정의되며, 설정 클래스에서 관리됩니다.코드 예시:
package org.example.di05;
import org.springframework.context.annotation.Bean;
public class BeanConfig {
@Bean
public BoardTo boardTo() {
BoardTo to = new BoardTo();
to.setSeq(1);
to.setSubject("제목 1");
return to;
}
}
코드 예시:
@Bean
public Action writeAction() {
BoardTo to = new BoardTo();
to.setSeq(2);
to.setSubject("제목2");
WriteAction writeAction = new WriteAction();
writeAction.setTo(to); // Setter Injection
return writeAction;
}
코드 예시:
@Bean
public WriteAction writeAction1() {
WriteAction writeAction = new WriteAction();
writeAction.setTo(boardTo()); // 재사용 가능
return writeAction;
}
@Bean
의 initMethod
와 destroyMethod
속성을 사용하여 커스텀 초기화 및 소멸 메서드를 지정할 수 있습니다.코드 예시:
@Bean(initMethod = "init_method", destroyMethod = "destroy_method")
public Action action() {
return new WriteAction();
}
WriteAction 클래스:
public class WriteAction implements Action {
public WriteAction() {
System.out.println("WriteAction() 생성자 호출");
}
@Override
public void execute() {
System.out.println("execute() 실행");
}
public void init_method() {
System.out.println("init_method() 호출");
}
public void destroy_method() {
System.out.println("destroy_method() 호출");
}
}
1. WriteAction() 생성자 호출
2. init_method() 호출
3. execute() 실행
4. destroy_method() 호출
@Component
를 사용하여 클래스를 스프링 빈으로 등록합니다.@ComponentScan
을 통해 특정 패키지를 스캔하고 빈을 자동으로 탐색합니다.코드 예시:
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization 호출");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization 호출");
return bean;
}
}
BeanConfig 설정:
@ComponentScan(basePackageClasses = {CustomBeanPostProcessor.class})
public class BeanConfig {
@Bean(initMethod = "init_method", destroyMethod = "destroy_method")
public Action action() {
return new WriteAction();
}
}
@Component
를 자동으로 탐색하여 빈으로 등록.basePackageClasses
옵션 사용.@Configuration
클래스를 작성하여 모듈화 가능.@Import
를 통해 여러 Config를 하나로 통합.코드 예시:
@Configuration
public class BeanConfig1 {
@Bean
public BoardTo boardTo() {
return new BoardTo();
}
}
@Configuration
public class BeanConfig2 {
@Bean
public Action writeAction() {
return new WriteAction();
}
}
@Configuration
@Import({BeanConfig1.class, BeanConfig2.class})
public class MainConfig {
}
@Import
를 사용해 한 Config에서 모든 설정을 통합 관리.Bean 등록 및 설정:
@Bean
어노테이션으로 설정.Bean 생명주기 관리:
@Bean(initMethod, destroyMethod)
를 통해 커스텀 초기화 및 소멸 메서드 지정.BeanPostProcessor
로 초기화 전후 로직 추가 가능.자동 구성:
@Component
와 @ComponentScan
으로 빈 자동 등록 및 관리.Config 모듈화:
@Import
를 통해 통합 관리 가능.