Bean을 생성하는 3가지 방법 1. @Component 애노테이션으로 생성하기 스프링부트에서 가장 보편적으로 사용하는 방법으로 @Component 애노테이션을 사용할 수 있다. 개발자가 직접 작성한 Class에만 사용할 수 있다. @Component public class MyComponent1 implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("MyComponent1.afterPropertiesSet"); } } 2. @Bean 애노테이션으로 생성하기 주로 외부 라이브러리의 객체들을 Bean으로 만들때 사용하거나, 같은 타입의 빈을 여러개 생성하고 싶을 ..
스프링 프레임워크에서 하나의 인터페이스 (혹은 상위 클래스)를 구현(상속)한 여러개의 빈이 존재하고, 그 빈들을 모두 다뤄야 하는 경우에 예제를 보겠습니다. 예제로 사용할 빈들은 다음과 같습니다. public interface Music { void playing(); } @Component public class Music1 implements Music{ @Override public void playing() { System.out.println("뮤직1의 흥겨운 노래"); } } @Component public class Music2 implements Music{ @Override public void playing() { System.out.println("뮤직2의 즐거운 노래"); } } @..
스프링 빈(bean)은 쓰레드 세이프.. 하겠..지?? 빈(bean)은 개발자 입장에서 편리합니다. 스프링이 생성하고 관리하고 조립도 해주고 많은 제어를 많이 해주니까 말이죠. (어제까지만 해도) 저는 스프링 빈(bean)이라면 쓰레드 세이프 할 것이라는 무지에서 비롯된 믿음이 있었습니다. 하지만 스프링 빈(bean)은 근본적으로 쓰레드 세이프 하지 않습니다. 왜 쓰레드 세이프 하다고 오해했을까? 같이 공부하는 (주니어 개발자) 친구들에게 질문해봐도 이 부분에서 같은 오해를 하는 친구들이 많다는 걸 알 수 있었습니다. 왜 이런 오해를 하고 있을까요? 첫번째 이유는 많은 요청을 받는 멀티 쓰레드 환경에서 학습해보지 못한 경험상에 이유입니다. 두번째 이유는 (놀랍게도) 쓰레드 세이프하게 빈(bean) 클래스..
Bean이란 무엇인가? Bean을 한마디로 정리하자면, '스프링이 생성하고, 관리해주는 객체' 라고 할 수 있다. (그러므로 개발자가 직접 new연산자로 생성한다면 그것은 Bean이 아니다.) 왜 객체를 Bean으로 해야 할까? 스프링같은 프레임워크를 다루어 보지 않은 초보 개발자들에겐 자연스러운 궁금증이 생겨난다. 왜 객체를 스프링이 생성하고 관리해야 하는가? 스프링은 객체를 다루기 위한 보조 기능들을 제공한다. 예를들어 트랜잭션처리, 객체의 라이프사이클 관리, 자동주입 등등... 정확히 어떠한 기능인지는 알 수 없을지 라도 많은 도움을 준다는 것은 알 수 있다. 이러한 기능을 제공받기 위해서 객체를 제어하기 위한 주도권을 스프링에게 넘겨주어야 하고, 그러기 위해서 객체를 Bean으로 생성 하는 것이다..