티스토리 뷰
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
'정리용 > SpringBoot' 카테고리의 다른 글
[Spring] 4. 3-Layered Architecture Pattern (0) | 2025.02.19 |
---|---|
[Spring] 3. SpringContext - Bean 주입 (0) | 2025.02.19 |
[Spring] 3. Spring Context (0) | 2025.02.19 |
[Spring] 2-2-2. Spring MVC - Servlet 객체 / FrontController (0) | 2025.02.07 |
[Spring] 2-2-1. Spring MVC - Controller의 반환 값 (1) | 2025.02.07 |
- Total
- Today
- Yesterday
- useState
- useCallback
- ssh
- useContext
- useMemo
- asac7
- asac7기
- acas#acas7기
- asac7#asac
- useEffect
- asac#asac7기
- memo
- useLayoutEffect
- ASAC
- useReducer
- acac
- useRef
- react
- Nginx
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |