SpringFramework26 [Spring] 빈 스코프 (1) - 프로토타입 스코프 빈 스코프란? 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문에 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될때 까지 유지되는 스코프 application: 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프 프로토 타입 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의.. 2021. 12. 23. [Spring] 빈 생명주기 콜백 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 지점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. ublic class NetworkClient { private String url; public void setUrl(String url) { this.url = url; } public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } //서비스 시작시 호출 public void connect() { System.out.println("connect: " + url); } publ.. 2021. 12. 23. [Spring] 의존관계 자동 주입 (3) 애노테이션 직접 만들기 @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("MainDiscountPolicy") public @interface MainDiscountPolicy { } //---------------------------- @Component @MainDiscountPolicy public class RateDiscountPolicy implements DiscountPolicy { //---------.. 2021. 12. 22. [Spring] 의존관계 자동 주입 (2) 롬복과 최신 트랜드 롬복 라이브러리 설치 스프링 세팅단계의 start.spring.io에서 lombok 라이브러리를 추가하고 받아도 됨 롬복의 대표적인 기능 @Getter, @Setter 애노테이션 (Getter Setter 자동 완성) package hello.core; import lombok.Getter; import lombok.Setter; @Getter @Setter public class HelloLombok { private String name; private String age; public static void main(String[] args) { HelloLombok helloLombok = new HelloLombok(); helloLombok.setName("aa"); Stri.. 2021. 12. 22. [Spring] 의존관계 자동 주입 (1) 의존관계 주입 방법 생성자 주입 생성자를 통해 의존관계를 주입하는 방식 생성자 호출 시점에 딱 1번만 호출되는 것이 보장됨 불변, 필수 의존관계에 사용 생성자가 1개 있다면 @Autowired 수정이 가능함 (2개 있을 경우 @Autowired 필수) @Component public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } 수정자 주입 setter라 불리는 필드의.. 2021. 12. 22. [Spring] 컴포넌트 스캔 컴포넌트 스캔과 의존 관계 자동주입 컴포넌트 스캔은 스프링 빈을 스캔해서 스프링 기능을 실행하는것 @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) // 다른 Configuration이 등록되면 안되기 때문에 등록 (@Configuration일 경우 자동 스캔) // 실무에서 exclude는 잘 안씀 ) public class AutoAppConfig { } @Component public class MemberServiceImpl implements MemberService { private final MemberRepo.. 2021. 12. 21. [Spring] @Configuration과 싱글톤 memberRepository() -> new MemoryMemberRespository 객체를 새로 생성하는 메서드 1. memberService() -> memberRepository -> new MemoryMemberRespository 사용 2. orderService ()-> memberRepository -> new MemoryMemberRespository 사용 1번에서 사용되는 MemoryMemberRespository와 2번에서 사용된 MemoryMemberRespository는 서로 다른 객체이지 않을까? (둘다 메서드를 사용할 때 new 키워드로 새로 생성되기 때문에) 만약 다른 객체라면 싱글톤 패턴에 위배되는 현상! [테스트 결과] @Test void configurationTest.. 2021. 12. 17. [Spring] 싱글톤 컨테이너 웹 어플리케이션은 고객이 요청할때마다 인스턴스를 새로 생성하게된다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이터") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회: 호출할 때마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); // 2. 조회: 호출할 때마다 객체를 생성 MemberService memberService2 = appConfig.memberService(); // 참조값이 다른 것을 확인 System.out.println("memberService1 = " + memberService1); System.out.print.. 2021. 12. 17. [Spring] 스프링 컨테이너 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext(인터페이스)를 스프링 컨테이너라고 한다. AppConfig.class 정보(애플리케이션 구성정보)를 ApplicationContext에 넘겨준다. AppConfig 정보를 기반으로 빈 저장소에 AppConfig에 있는 @Bean을 하나씩 저장한다. 형태는 {빈 이름(메서드 이름):빈 객체(메서드 구현체)} 형태로 저장된다. (이름은 모두 다른 이름으로 지정해야한다) 스프링 컨테이너는 설정 정보를 참고해서 의존 관계를 주입(DI) 한다. 스프링 컨테이너에 등록된 Bean 조회 getBean() 메서드 .. 2021. 12. 16. 이전 1 2 3 다음