본문 바로가기
반응형

BEAN7

Spring 빈 스코프를 알아보자♻️ 빈 스코프는 말 그대로 스프링 빈이 존재할 수 있는 범위를 말합니다. 스프링은 아래와 같은 스코프를 지원합니다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프입니다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프입니다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프입니다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프입니다. application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프입니다. https://applepick.tistory.com/129 스프링에서 싱글톤 적용 시 주의 할 점! ⚠️ 스프링 컨테이너.. 2022. 1. 31.
Bean의 생명주기 콜백 🌱 스프링 빈의 생명주기 [객체 생성 -> 의존관계 주입] 대부분 스프링 빈은 위와 같이 라이프사이클을 가집니다. 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료됩니다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 합니다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공합니다. 싱글톤을 사용 시스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줍니다. 따라서 안전하게 종료 작업을 진행할 수 있습니다. 스프링 빈의 이벤트 라이프 사이클은?? 스프링 컨테이너 생성 ➡ 스프링 빈 생성 ➡ 의존관계 주입 ➡ 초기화 콜백 ➡ 빈 사용 ➡ 소멸전 콜백 ➡ 스프링 .. 2022. 1. 25.
Bean 자동 주입 VS 수동 주입 어떤 걸 사용해야할까? 🌱 기본적으로 자동 주입을 사용하자! 결론적으로 스프링이 출시한 후 점점 자동 주입을 선호하는 추세입니다. 스프링은 @Component 뿐만 아니라 @Controller , @Service , @Repository 처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원해줍니다. 설정 정보를 기반으로 애플케이션을 구성하는 부분과 실제 동작하는 부분을 명확하게 나누는 것이 이상적이지만, 개발자 입장에서 스프링 빈을 하나를 등록해봅시다. @Component 만 넣어주면 끝(자동 주입) @Configuration 설정 정보에 가서 @Bean을 적고 -> 객체를 생성하고 -> 주입할 대상을 일일이 적어주는 과정은 상당히 번거롭습니다.(수동 주입) 또한, 관리할 빈이 많아서 설정 정보가 커지면.. 2022. 1. 20.
UnsatisfiedDependencyException 오류 해결! 😂 인프런 강의를 듣는 도 중 테스트 코드를 작성하고 테스트를 돌리자마자 이러한 에러를 발생했습니다. ㅠㅠ 한 시간 동안 삽질을 해보면서 깨달음을 얻었습니다. 저 상황은 빈을 생성할 시 해당 빈이 충돌 난 것입니다. 예를 들어, class ratediscount(퍼센트 할인)와 class fixdiscount(고정 할인)이 discount(interface)를 implements하고 있습니다. 여기서 spring bean 의존관계 주입 시 discount 인터페이스만 의존하게 구현한다면, 서비스는 discount가 실질적으로 ratediscount인지, fixdiscount인지 알 수 없습니다. 이 상황에서 ratediscount과 fixdiscount 둘 다 @bean을 적용시킨다면, 스프링은 bean 생.. 2022. 1. 19.
의존관계 주입시 생성자 주입을 사용하자! 😲 스프링에서 의존관계를 주입 시 4가지의 방법으로 나누어집니다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 말그대로 생성자를 통해서 의존성을 주입하는 것입니다. 생성자 주입의 특징으로는 생성자 호출 시점에 딱 한 번만 실행한다는 점입니다. 불변성과 필수 의존관계에 사용됩니다. 생성자 주입 시 메서드에 생성자가 한개만 있을 경우 @Autowired를 생략해도 됩니다. (물론, 스프링 빈에만 해당) 수정자 주입(setter 주입) 흔히 알고 있는 setter에 의존성을 주입하는 것입니다. 특징으로는 선택, 변경 가능성 있는의존관계에 사용합니다. 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법입니다. 이 방법은 추천하지 않습니다. 그 이유는 메서드에 set.. 2022. 1. 17.
스프링에서 싱글톤 적용 시 주의 할 점! ⚠️ 스프링 컨테이너는 기본적으로 싱글톤을 제공합니다. 위의 사진을 보자면 스프링 DI 컨테이너에 memberSerivce의 bean이 등록되어있다고 가정하면 각 각 사용자의 요청마다 객체를 생성하는 것이 아닌 객체 인스턴스를 하나만 생성하여 공유합니다. 메모리 낭비도 없고 효율적으로 재활용할 수 있습니다. 이때 주의해야 할 점이 있습니다. 스프링 컨테이너에 등록된 bean은 무상태(stateless)를 유지 해야합니다. 이 부분이 정말 정말 중요합니다. 말 그대로 객체는 상태를 가지고 있으면 안 됩니다. public class menuService { private String menuName; public void order(String menuName){ System.out.println("주문한 메뉴 .. 2022. 1. 15.
Spring 컨테이너에 등록된 bean 조회하기 테스트 코드[Juint5] 스프링 컨테이너란? 자바 객체의 생명주기를 관리해주며, 생성된 자바의 기능을 제공해줍니다. 여기서 말하는 자바의 객체는 Spring에서 Bean이라고 불립니다. 스프링 컨테이너는 DI(의존성 주입), IoC가 적용됩니다. 대부분 객체들은 new, 인터페이스 생성을 통해, 개발자가 직접 의존성을 주입해줍니다. 이 역할을 스프링 컨테이너에 위임하는 것입니다. 스프링 컨테이너를 생성하면 스프링 컨테이너 안에 스프링 빈 저장소가 생성됩니다. 여기에 빈의 이름과, 빈객체 정보를 저장합니다. 개발자는 스프링 컨테이너에서 적용된 빈을 꺼내 활용합니다. 크게 Bean 컨테이너는 스프링 자체적인 Bean과 사용자가 생성한 Bean을 가지고 있습니다. 둘 다 출력하는 방법과 사용자의 Bean만 출력하는 방법을 작성해보았습.. 2022. 1. 9.
반응형