빈이란... 특정한 정보를 저장하기 위한 클래스이다.
간단하게 특정 데이터를 저장하기 위한 자바 객체라고 생각하면 이해가 쉬울 것으로 생각되며 흔히 스프링에서 쓰이는 vo, dto라고 생각하면 된다.
(참고 : vo = getter만 존재하는 객체, dto는 setter,getter 둘다 존재, 즉 편집 가능여부에 따라 개념적으로 구분.)
(추가 : 스프링의 @controller, @service 또한 빈으로서 스프링 컨테이너에 등록된다. 이는 객체를 객체 혹은 주소값을 담은 -ref 구조라고 생각하면 이해가 용이할 듯 하다.) - 확실치 않음...
bean은 어노테이션을 활용하여 java소스를 통해 만들거나 xml 파일 형식으로 작성할 수 있다.
java 소스를 활용할 경우에는 @bean 또는 @component 어노테이션을 활용하는데 두 어노테이션의 차이는 편집이 가능하냐 불가능하냐로 따질 수 있다.
@bean의 경우 메소드 위에서 선언이 가능하며 보통 외부 라이브러리(일반적으로 read-only)를 활용할때 인스턴트 객체를 생성하는 메서드를 만들고 그 메서드에 선언하여 사용한다.
사진을 보면 @target이 메서드로 되어있는 것을 볼 수 있다.
@component의 경우에는 클래스 위에서 선언하는데 보통 사용자(개발자)가 직접 편집해야 할 경우 활용하며 SpringBoot 설정을 위한 bean 생성시 주로 활용되는 경우가 있다.
마지막으로 xml로 bean을 등록하는 경우는 주로 레거시 환경에서 설정을 할 경우에 많이 활용된다.
beans, bean 태그를 이용해 작성하며 선언된 빈은 java 소스에서도 활용이 가능하다.
상기 이미지에서 alias는 name에 설정된 id를 가진 빈에게 다른 별칭(alias 태그)을 추가하는 것이며 bean은 고유 id를 가지며 class에 선언된 형식을 따라 구성된다.
프로퍼티는 변수이며 name은 setter 값, value는 해당 변수에 할당되는 값이다.
즉 calss에 선언된 객체에 있는 name이라는 이름을 가진 변수값에 value값을 할당해주는 형식으로 작동이 된다.
기본적으로 setter 기능에 집중되어 있으며 별도의 getter는 지원되지 않는 것으로 보인다. (확실하지 않음 ㅠㅠ)
추가로 ref는 해당 프로퍼티에 ref에 선언된 빈을 value값으로 담는다.
상기와 같이 xml로 등록한 bean을 자바에서 불러올 수 있도록 ApplicationContext 객체를 자바에서 지원한다.
주니어 자바 개발자를 위한 100가지 질문 답 (1-1) (0) | 2023.05.23 |
---|