

DTO, VO, BEAN 등 getter 와 setter 로만 이루어진 순수 자바 오브젝트 클래스임을 말한다.
오래된 방식의 간단한 자바 오프젝트라는 말로 중량 프레임워크를 사용하게 되면서
해당 프레임 워크에 종속된 무거운 객체를 만들게 된 것에 반발하며 사용하기 시작한 용어이다.
진정한 POJO란 객체지향적인 원리에 충실하며, 환경과 기술에 종속되지 않고
필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.
스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다. (주입 당하는 클래스를 의미한다.)
Bean에 추가 설정을 줘서 싱글톤으로 만들지 않는 이상 무조건 빈에 대해 싱글톤을 보장한다.

Bean을 관리하는 관리자로 라이프 사이클 이전, 이후에 필요한 부가작업을 할 수 있는 라이프 사이클 콜백이다.
BeanPostProcessor의 구현체인 AutowiredAnnotationBeanPostProcessor (하나의 빈으로써 spring IoC 컨테이너에 등록되어 있다.)가 빈의 초기화 라이프 사이클 이전,
즉 빈이 생성되기 전에 @Autowired가 붙어있으면 해당하는 빈을 찾아서 주입해주는 작업을 한다.
@Component를 명시하여 빈을 추가하는 방법이다. 클래스 위에 @Component를 붙이면 Spring이 알아서 SpringContainer에 Bean을 등록한다. (클래스 또는 인터페이스에만 사용이 가능하다.)

콜백 : 조건에 따라 실행될 수도 실행되지 않을 수도 있는 개념이다.
보통 프로젝트를 하다보면 DB연결, 네트워크 소켓 연결 등과 같이 시작 시점에 미리 연결한 뒤 어플리케이션 종료시점에 연결을 종료해야 하는 경우 객체의 초기화 및 종료 작업이 필요하다. Bean도 위와 같은 원리로 초기화 작업과 종료 작업이 나눠서 진행된다. 간단히 말해서 객체 생성 → 의존관계 주입이라는 라이프사이클을 가진다.
즉, 스프링 빈은 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다.