# 수익을 위해 작성한 글이 아닙니다.
# 수업을 받고 내용을 정리하기 위해 작성한 글입니다.
생각
@Autowired를 이해하려고 하다보니 의존성 주입이라는 단어가 보였다. 이미 등록된 빈을 찾아서 해당 필드에 주입해주는 역할을 한다고 해서 이때 빈이란 무엇인지 궁금해졌다.
Spring Bean의 정의
- Spirng Framework에 관리되는 객체이며, Java 클래스로 정의된다.
- IoC(제어의 역전) 컨테이너에 의해 생성, 초기화, 소멸되는 모든 객체를 포함한다.
Spring Bean 특징
- IoC(제어의 역전)
- Spring Bean은 Spring IoC 컨테이너에 의해 생성되고 관리되는 객체로, 개발자가 직접 인스턴스를 생성하지 않고 컨테이너가 이를 자동으로 처리한다.
- IoC(Inversion of Control, 제어의 역전)는 객체의 생성과 관리를 프레임워크가 맡게 하는 개념이다. 즉, 개발자가 직접 객체를 생성하고 관리하는 대신 프레임워크가 필요한 객체를 자동으로 만들어 주고 주입해준다는 말이다.
- DI(의존성 주입)
- Bean 간의 의존성을 Spring이 자동으로 주입한다. 이를 통해 객체 간의 결합도를 낮추고 코드의 유연성과 재사용성을 높인다.
- 의존성 주입 방식에는 생성자 주입, 세터 주입, 필드 주입등이 있다.
- 생명주기 관리
- Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 관리한다.
- Bean의 생명주기는 인스턴스화, 의존성 주입, 초기화, 소멸로 나뉜다.
- 인스턴스화: Spring 컨테이너가 Bean의 인스턴스를 생성한다.
- 의존성 주입: 다른 Bean이나 값을 자동으로 주입하여 초기화합니다.
- 초기화: 필요한 초기화 작업을 수행합니다. @PostConstruct 어노테이션을 사용할 수 있습니다.
- 소멸: 컨테이너가 종료될 때 Bean을 정리합니다. @PreDestroy 어노테이션을 사용할 수 있습니다.
- 다양한 스코프 설정
- Spring Bean은 여러가지 스코프를 가질 수 있다.
- 기본적으로 싱글톤(Singletone; 하나의 인스턴스)으로 설정된다. 컨테이너당 하나의 인스턴스만 생성.
- 필요에 따라 prototype(매번 새로운 인스턴스), request(HTTP 요청당 하나), session(HTTP 세션당 하나), application(웹 어플리케이션 당 하나) 등을 설정할 수 있다.
- prototype: 요청 시마다 새로운 인스턴스 생성.
- request: 웹 애플리케이션에서 HTTP 요청당 하나의 인스턴스 생성.
- session: HTTP 세션당 하나의 인스턴스 생성.
- application: ServletContext당 하나의 인스턴스 생성.
- AOP(관점 지향 프로그래밍) 지원
- Spring Bean은 AOP(관점 지향 프로그래밍)와 통합되어 있어 로깅, 트랜잭션 관리, 보안 등을 Bean에 등록한다. 이를 통해 Bean을 효과적으로 관리하고 의존성을 간편하게 처리할 수 있다. 그리고 코드의 중복을 줄이고, 유지보수를 용이하게 한다.
- Bean 등록
- 어노테이션 기반의 구성
- Spring 컨테이너에 @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하여 Bean을 등록할 수 있다.
- 유연한 구성(프로파일링 및 조건부 등록)
- @Profile 어노테이션을 사용하여 특정 환경에서만 Bean을 등록하거나 @Contidional 어노테이션을 통해 조건에 따라 Bean의 등록을 제어할 수 있다.
Spring Bean 등록 방법
- XML 설정 파일을 통해 Bean을 등록.
- 예: <bean id = "myBean" class = "com.example.MyClass" />
- 다양한 어노테이션을 사용하여 Bean을 자동으로 등록.
- @Component : 일반적인 Bean으로 등록.
- @Controller : 웹 MVC 컨트롤러로 등록.
- @Service : 서비스 레이어 Bean으로 등록.
- @Mapper : MyBatis와 같은 ORM 프레임 워크에서 사용.
- @Repository : 데이터 접근 객체(DAO)로 등록.
- Java 기반 설정을 통해 Bean을 등록.
- @Configuration : Java 기반 설정 클래스를 정의. 이 클래스 내에서 Bean을 등록 가능.
- @Bean : 메서드를 통해 Bean을 생성하고 등록. 이 메서드는 Spring 컨테이너에 의해 관리되는 객체를 반환한다.
- @Scope : Bean의 스코프를 설정. 예를 들어, singleton(기본값) 또는 prototype(매번 새로운 인스턴스 생성) 등을 지정할 수 있다.
- @Lazy : Bean의 초기화를 지연시킨다. 필요할 때까지 Bean이 생성되지 않도록 설정할 수 있다.
@Configuration
public class AppConfig {
@Bean
@Scope("prototype") // 매번 새로운 인스턴스 생성
public MyClass myPrototypeBean() {
return new MyClass();
}
@Bean
@Lazy // 실제 사용될 때까지 초기화 지연
public MyClass myLazyBean() {
return new MyClass();
}
}
'Java > SpringBoot' 카테고리의 다른 글
[MyBatis] useGeneratedKeys, keyProperty (1) | 2024.10.28 |
---|---|
@Autowired (0) | 2024.10.23 |
@Controller, @RestController 차이 (0) | 2024.10.23 |
SpringBoot(스프링부트) 수업 2일차 (0) | 2024.09.24 |
SpringBoot(스프링부트) 수업 1일차 (1) | 2024.09.23 |