자바에서 Bean
- 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따르는 구조체
- private 프로퍼티와 getter/setter로만 데이터를 접근한다.
- 단순하게 데이터를 저장하기 위한 용도로만 사용하는 단순한 구조체를 자바에서 Bean이라고 한다.
public class JavaBean { private String id; private Integer count; public JavaBean(){} public String getId() { return id; } public void setId(String id) { this.id = id; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } }스프링에서 Bean
스프링은 IOC 컨테이너에 의해 생성되고 관리되어 있는 객체이다.
자바에서 처럼 new를 사용하여 생성하지 않는다.
각각의 Bean끼리 서로를 편리하게 의존하면서 사용할 수 있다.
사용자가 만든 클래스를 Bean으로 등록하겠다고 하면 스프링 컨테이너 안에 등록이 되고 Spring Application Context안에 Bean이 등록이 되고 우리가 만든 클래스를 실체 인스턴스로 스프링에서는 단일 객체로 인스턴스화를 시켜준다.
Spring Application Context가 가지고 있는 설정으로 개발자가 직접 만든 클래스에 적용 시켜준다.
어노테이션으로 해당 빈의 역할을 명시해준다 @Bean , @Controller , @Service
Bean 등록시에는 기본적으로 첫 문자만 소문자 -> accountService
Bean을 생성하는 규칙을 Scope라고 한다.
- Singleton: 컨테이너가 단일로 생성
- prototype: 작업시마다 Bean을 새로 생성하고 싶은 경우
- request: Http 요청시마다 새롭게 Bean을 생성하고 싶은 경우
BeanLifeCycle callback(빈 생명주기 콜백 함수)
- 어떤 이벤트가 발생할 경우 호출되는 메서드
- ex) 빵을 구매할려고 했을때 빵에 재고가 떨어진 경우 -> 해당 행동을 취해라
- Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수를 LifeCycle Callback이라고 한다.
- 주로 빈을 생성하는 @PostConstruct / 빈을 파괴하는 @PreDestroy(주로 어플리케이션 종료시점)
- 자원의 소모가 클 경우 콜백 함수를 사용하는 것이 좋다.(PostConstruct)
- 어플리케이션의 종료때는 PreDestroy를 활용한다.