◀ PREV [1] NEXT ▶ 의존관계 자동 주입 •의존관계 자동 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 호출할때 의존관계를 주입하는 방식(OrderServiceImpl의 생성자에 @AutoWired를 붙인 방식) 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수(final을 사용해서 널을 허용하지 않은?)적인 의존관계에 사용 *단일 생성자일때는 @AutoWired를 생략해도 자동으로 주입 된다 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 OrderServiceImpl 클래스를 수정해서 필드의 MemberRepository와 DiscountPolicy에 set~~ 형태의 수정자로 필드값을 수정해주는 방식 선택, 변.. 2023. 10. 3. 컴포넌트 스캔 • 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 @Bean으로 직접 빈을 등록해줬지만 등록할 빈이 많아지면 이 방법에는 한계가 있다.. 스프링에는 자동으로 빈을 등록하는 컴포넌트 스캔 기능이 있다! 또 의존관계도 자동으로 주입하는 `@Autowired` 라는 기능도 제공한다. AutoAppConfig클래스를 만들어서 자동으로 빈 등록하는 걸 해보자 컴포넌트 스캔을 사용하면 `@Configuration` 이 붙은 설정 정보도 자동으로 등록되기 때문에, AppConfig, TestConfig 등 앞서 만들어두었던 설정 정보도 함께 등록되고, 실행되어 버린다. 그래서 `excludeFilters` 를 이용해서 설정정보는 컴포넌트 스캔 대상에서 제외했다. 컴포넌트 스캔의 대상이 될 클래스에 @Comp.. 2023. 9. 20. 싱글톤 컨테이너 • 웹 어플리케이션과 싱글톤 싱글톤으로 객체의 인스턴스를 단 하나만 만들고 공유하는 방식이 아닌 호출할때마다 새 객체를 만드는 방식을 사용하면 많이 비효율적이다. 일단 비효율적인 DI 컨테이너를 만들고 개선해보자 public class SingletonTest { @Test @DisplayName("스프링 없는 순수 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); //1. 조회 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); System.out.println("membe.. 2023. 9. 18. 스프링 빈과 스프링 컨테이너 • 스프링 컨테이너 생성 `ApplicationContext` 는 스프링 컨테이너, 인터페이스다 memberApp이나 orderApp에서 만든 `new AnnotationConfigApplicationContext(AppConfig.class);`는 ApplicationContext인터페이스의 구현체이다 스프링 컨테이너는 넘어온 클래스 정보를 사용해서 빈을 등록한다, 빈의 이름은 중복되지 않게 하자! • 스프링 빈 조회 ac.getBean(빈이름, 타입) ac.getBean(타입) 조회하려는 빈이 없으면 오류가 생긴다 • 애플리케이션 빈과 전체 빈 조회 test 폴더에 ApplicationContextInfoTest를 생성하고 테스트 ac.getBeanDefinitionNames(); 메서드로 빈들을 가.. 2023. 9. 13. 자바로 만들기 단축키 - 설정 keymap에서 볼수 있음 alt + insert로 generate 해서 생성자,get,set 등 쉽게 만들 수 있음 ctrl + alt + v - 타입?을 알아서 만들어줌 psvm - public static void main메인 함수 만들때 psvm 치고 엔터누르면 바로 생성 ctrl + shift + t dip 위반 이렇게 기능을 확장해서 변경하면 클라이언트 코드에도 영향을 준다 -> ocp 위반 문제 해결하기 dip 위반하는걸 추상(인터페이스)에만 의존하게 의존관계를 변경하면 된다 private DiscountPolicy discountPolicy; 2023. 8. 31. 이전 1 다음