스프링 3

[Spring] 의존관계 주입 방법

다양한 의존관계 주입 방법 1. 생성자 주입 생성자를 통해서 의존 관계를 주입 받는 방법이다. 특징 : 생성자 호출 시점에 딱 1번 호출됨. -> 불변, 필수 의존관계에 사용한다. 생성자가 딱 한개 있을 때는 @Autowired를 설정하지 않아도 자동으로 등록해준다. 2. 세터(Setter) 주입 setter라고 불리는 필드 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다. 특징 : 선택, 변경 가능성이 있는 의존관계에 사용한다. 3. 필드 주입 필드에서 바로 의존관계를 주입하는 방법이다 특징 : 외부에서 변경이 불가능하여 코드가 간결해지지만 테스트가 힘들고 DI 프레임워크가 없으면 아무것도 없기 때문에 사용하지 말자!! 애플리케이션의 실제 코드와 관계없는 테스트코드, 스프링 설정을 목..

스프링 2024.04.18

[Spring] 웹 애플리케이션과 싱글톤

대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 대부분 여러 고객이 동시에 요청을 한다. 만약 고객의 요청마다 객체가 계속 생성이 되면 어떻게 될까? @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberService1 = " +..

스프링 2024.04.16

[Spring] 스프링 컨테이너에 존재하는 빈 조회하기

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("애플리케이션 출력하기") void findApplicationBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); if(beanDefinition.getRole() == BeanDefinition.RO..

스프링 2024.04.16