스프링 Bean 이란?
스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 Bean을 관리한다.
빈은 인스턴스화된 객체를 의미하며 , 스프링 컨테이너에 등록된 객체를 bean이라고 함. = new 키워드 대신 사용한다고 생각하면 된다 !
메서드에 붙여 반환되는 객체를 Bean으로 관리할 때 사용한다.
스프링 컨테이너란 ?
스프링 빈과 수명주기를 관리하며 , 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다.
원래라면 new 연산자로 객체를 생성하고 소멸시키지만 스프링 컨테이너를 사용하면 해당역할을 대신해준다.
IOC 컨테이너란 ? (제어 반전)
스프링 으로 객체를 생성하고 의존성을 관리해주는 컨테이너
인스턴스의 생성 - 소멸 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다. 그렇기에 개발자는 로직에 집중할 수 있게 된다.
제어 반전 : 제어권을 개발자에서 스프링 프레임워크로 이동시키는것
Spring Context 란?
Bean 의 확장 버전으로 스프링이 Bean 을 다루기 쉽게하기 위해 기능들이 추가된 공간이다. 단순히 Bean 을 다루는것 외에도 추가적인 기능을 수행한다.
=대충 컨테이너 안에 context , context 안에 bean 이라고 생각하셈 container > context > Bean
java bean vs spring bean 의 차이 ?
java bean은 필드 , 전달 인자가 없는 생성자 , getter 와 setter 로만 접근 , 관리하는 자바 객체
spring bean은 스프링 IOC 컨테이너에서 관리되는 자바 객체를 스프링 빈이라고 함.
Spring Annotation(어노테이션,@) 이란 ?
사전적 정의는 주석이라는 뜻이지만 Java 에서는 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다.
어노테이션을 사용하면 코드가 깔끔해지고 , 재사용이 가능해진다.
스프링에서 @Component 란 ?
import 비슷한 역할같긴한데,, 다른 패키지에 있는 class 파일이랑 연결시켜서 코드를 간결하게 만들어주는 역할인것 같음.
pacman class 에 컴포넌트하면 Gamerunner class에서 run 했을 때
pacman 의 기능이 실행되고 다른 게임 class에 하면 또 다르게 됨.
코드를 간단하게 해줌.
클래스에 붙여 해당 클래스 타입을 기반으로 빈을 관리
그럼 Component Scan 이란?
- 빈으로 등록 될 준비를 마친 클래스들을 스캔하여, 빈으로 등록해주는 것이다.
- 빈으로 등록 될 준비를 하는 것이 무엇일까?
- 우리가 @Controller, @Service, @Component, @Repository 어노테이션을 붙인클래스들이 빈으로 등록 될 준비를 한 것이다.
- 기본적으로 @Component 어노테이션을 빈 등록대상으로 포함함.
- 패키지 주소를 따로 명시하지 않는다면 현재 패키지를 기준으로 스캔한다
스프링이 객체를 만들게 하려면 ?
스프링이 관리하는 bean 프레임워크를 모두 나열하려면 어떻게 해야하나 ?
Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println); //메서드 참조
스프링 프레임워크가 우선순위를 부여하도록 하는 방법?
Primary 어노테이션을 지정해서 어떤 후보가 가장 중요한지 나타낼 수 있음.
@Qualifier 어노테이션(한정자) : 사용할 의존 객체를 선택할 수 있도록 해준다.
@Primary 와 @Qualifier 의 차이 ?
- Primary : 같은 타입 빈 2개이상 생성할 때, 하나의 빈에게 더 높은 선호도 부여
- Qualifier : 특정한 Bean을 사용해야 할때 지정 , 프라이머리보다 우선순위 높음
@Autowired 란 ?
필요한 의존 객체의 “타입”에 해당하는 빈을 찾아 주입한다
- 생성자 (가장 권장되는 방법)
- setter
- 필드
위의 3가지의 경우에 사용가능.
기본값이 True 라서 의존성 주입 대상 못찾으면 Run에 실패한다.
의존성 주입이란 ?
객체가 사용(의존)할 파라미터를 외부에서 선언하고, 이를 주입받아서 사용하는 방법!
컴포넌트와 Bean의 차이
대부분의 경우에는 컴포넌트를 사용함
- Bean 특징
- 커스텀 로직을 만들어야 할 때 사용함
- 코드를 일일히 다 작성해야함
- 메소드 호출이나 메소드의 파라미터를 받아서 사용함
- 컴포넌트
- 사용이 매우 쉬움 클래스에 어노테이션만 붙여서 쓰면 됨
- 생성자 , 필드 , setter 로 자동와이어링 함