2020.04.09 처음부터, 스프링 - Bean의 LifeCycle, Annotation으로 Bean 만들기

<Bean의 속성, 간단하게>

Spring에서 생성하는 Bean은 기본적으로 싱글톤으로 동작한다.

만약 Bean을 싱글톤이 아닌 다른 방식으로 생성하고 싶으면 scope를 수정해주면 된다.

scope에 사용할 수 있는 value는 singleton(기본), prototype(매번 새로운 객체가 생성됨) 이 있고 그 외에 HTTP request에 binding 하거나 HTTP 세션에 globally하게 반영할 수도 있다. (마치 flask의 g처럼)

그리고 Bean에는 init-method, destroy-method를 통해 hook도 등록이 가능하다.
객체의 생성과 종료 시기에 불려지는 함수이다.
주의할 것은 scope이 prototype이라면 bean은 destroy 훅이 동작하지 않는다.

prototype의 bean에 destroy 훅을 걸고 싶다면, 새로운 인터페이스와 클래스를 만들고 Bean 클래스에서 해당 인터페이스를 구현하고 블라블라 하는 방법이 있는데 이거는 필요할 때 찾아보면 될 것 같다.

<Annotation을 이용한 Bean 사용>

복잡하게 XML에 미리 모든 Bean을 써놓지 않고, 클래스에 Annotation을 주는 것만으로 해당 클래스가 Bean으로 동작하게 할 수 있다.

XML에 설정할 것은 딱 하나이다. component를 스캔할 base-directory 지정하는 것.
base-directory와 그 하위 폴더들까지 모두 탐색하며 컴포넌트 Annotation이 붙은 클래스를 찾고 그들을 모두 Bean으로 사용한다.

코드 예시를 보면,

아래처럼 @Component만 주면 tennicCoach가 자동으로 bean id가 되고 @Component("MyTennisCoach") 처럼 ID를 직접 명시할 수도 있다.

@Component
public class TennisCoach implements Coach {

@Override
public String getDailiyWorkout() {
return "Practice your backhand volley";
}

}

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용