스프링 설정 - @Configuration 애노테이션이 붙어 있는 클래스
AppCtx
@Bean 애노테이션 : 메서드명 위에 -> 수동 등록 빈
@ComponentScan("스캔범위")
-스프링 컨테이너가 생성할 객체의 클래스를 스캔할 범위
@Component
@Service
-특정 기능과 관련된 애노테이션-
-@Autowired
1) 멤버 변수 위
2) setter 메서드 위
3) Optional 형태로 감싼 구조 / 멤버 변수, setter 메서드
4)@Autowired 애노테이션을 사용하지 않고 의존성 주입
-생성자 매개변수에 의존성을 정의한 경우(+ 기본생성자는 정의X)
: 객체 생성을 할때 의존성 주입을 강제
-롬복 @RequiredArgsConstructor 와 함께 많이 사용
-초기화가 반드시 필요한 멤버 변수를 생성자 매개변수에 추가
1) 객체 생성 -> 의존 설정 -> 초기화 -> 소멸
-초기화 : 객체가 완전히 생성되고 조립된 다음에 처리할 작업을 정의하면 실행되는 단계
-소멸 : (ctx.close() -객체 소멸) : 소멸전에 처리할 작업을 정의하면 실행되는 단계
스프링 컨테이너 생성시 진행 되는 부분 (객채생성 -> 의존 설정 -> 초기화)
2) InitalizingBean 인터페이스
-afterProprtiesSet 메서드: 초기화 단계 시에 실행된다.
(객체가 완전히 조립되고 생성 된 후에 처리할 작업을 정의)
3) DisposableBean 인터페이스
-destroy 메서드
-컨테이너에 있는 객체가 소멸되기 전에 실행
(주로 객체 소멸 전에 할 작업 예) - 자원 해제 등 ..)
-외부 라이브러리, 자바 JDK 기본클래스, 스프링 프레임워크 기본 클래스 등등..
@Bean
1) initMethod
-intializingBean :: afterProprtiesSet 메서드와 동일 시점에 호출
2) destroyMethod
-DisPosableBean :: destroy 메서드와 동일 시점에 호출
@Scope
@Scope("singleton") : 정의하지 않아도 기본은 싱글톤 패턴으로 관리
@Scope("prototype") : 매번 조회시마다 새로운 객체를 생성
-스프링 객체 관리 기능은 기본적으로 싱글톤일때 정상적으로 동작
-prototype: 일부기능에 제한 조건
false 나옴