본문 바로가기
반응형

{ Backend, Server }/Spring8

[스프링] 빈 스코프(싱글톤, 프로토타입, 웹 관련 스코프) 스코프: 빈이 존재할 수 있는 범위 스프링이 지원하는 다양한 스코프 싱글톤: 기본 스코프, 스프링 컨테이너 시작~종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 사용법은 빈에 @Scope("prototype")을 설정해주면 된다. 프로토타입 빈은 컨테이너에게 빈을 요청할 때마다 매번 새로운 객체를 생성하여 반환해준다. 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프, 싱글톤이 아니기때문에 요청마다 매번 다른 인스턴스를 반환, 초기화까지만 관여하기 때문에 @PreDestroy같은 종료 메서드가 실행되지 않음 웹 관련 스코프 - request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 - session : 웹 세션이 생성되고 .. 2022. 1. 1.
[스프링] 빈 생명주기 콜백(인터페이스, 빈 등록 설정, 어노테이션) 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 * 초기화 콜백: 빈이 생성되고, 의존관계 주입이 완료된 후 호출 * 소멸 전 콜백 : 빈이 소멸되기 직전에 호출 1. 인터페이스 InitializingBean, DisposableBean @Override public void afterPropertiesSet() throws Exception { } @Override public void destroy() throws Exception { } - 단점: 메서드 이름 변경 불가, 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없음 2. 빈 등록 초기화, 소멸 메서드 지정 설정 정보에 @Bean(initMethod = .. 2021. 12. 28.
[스프링] 의존 관계 자동 주입, 옵션 처리, 롬북 라이브러리, 조회 빈 중복 처리, 조회한 빈 모두 가져오기 의존 관계 자동 주입 의존 관계 주입 4가지 방법 1. 생성자 주입 2. 수정자(setter) 주입 3. 필드 주입 4. 일반 메서드 주입 생성자 주입 - 생성자를 통해서 의존 관계를 주입 - @Autowired을 달아주면 되고, 생성자가 1개만 있으면 생략 가능(물론 스프링 빈으로 등록된 클래스일 경우만) - 생성자 호출 시점에 오직 1번만 호출되므로 불변, 필수 의존 관계에 사용됨 수정자(setter) 주입 - 수정자 메서드를 통해서 의존 관계를 주입 - 수정자에 @Autowired - 선택, 변경 가능성이 있는 의존 관계에 사용 필드 주입 - 필드에 바로 주입하는 방식 - 예시 : @Autowired private MemberRepository memberRepository; - 코드가 간결하지만 .. 2021. 12. 28.
[스프링] 컴포넌트 스캔, 탐색 위치, 중복 등록과 충돌 목표 컴포넌트 스캔을 이용하여 자동으로 스프링 빈을 등록하게 하자! 추가로 @Autowired 기능을 사용하면 의존관계도 자동으로 주입할 수 있게 된다! 컴포넌트 스캔 사용법 설정 정보에 @ComponentScan을 붙여주면 된다. 이때 추가 파라미터로 excludeFilters, includeFilters 등을 추가할 수 있다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } 그리고 스프링 빈으로 등록할 대상 클래스에 @Component을 달아주어야 한다. @Component public.. 2021. 12. 26.
[스프링] 싱글턴 컨테이너, @Configuration의 역할 싱글턴 패턴 - 싱글턴 패턴은 인스턴스를 하나만 생성되게 한다. - 싱글턴 패턴에도 문제점이 있는데, 다음과 같음 - 의존관계상 클라이언트가 구체 클래스에 의존한다. - 테스트 하기 어렵다. - 내부 속성을 변경하거나 초기화하기 어렵다. - private 생성자로 자식 클래스를 만들기 어렵다. 싱글턴 컨테이너 - 스프링 컨테이너는 싱글턴 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글턴으로 생성함을 보장해준다. - 스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도 알아서 싱글턴으로 객체 인스턴스를 관리해준다. 싱글턴 사용 시 주의점: 동기화 이슈 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를.. 2021. 12. 26.
[스프링] 스프링 컨테이너와 스프링 빈 스프링 컨테이너의 생성 /스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); - ApplicationContext는 인터페이스이며 이를 스프링 컨테이너라 함 - 인터페이스이기 때문에 XML기반으로 만들 수도 있고, 어노테이션 기반 클래스로 만들 수도 있음 (다양한 설정 형식을 지원할 수 있는 이유는 BeanDefinition이라는 추상화가 있기 때문) - 스프링 컨테이너 안에는 스프링 빈 저장소가 있고 빈 이름과 빈 객체가 저장된다. - 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입한다. - ApplicationContext 인터페이스는 BeanFacto.. 2021. 12. 25.
반응형