빈 스코프란?

스프링 핵심 원리/프로토 타입 스코프 2021. 1. 2. 15:01

스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글 톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다 싱글톤 : 기본 스코프 , 스프링 컨테이너의 시작과 종료까지 유지 되는 가장 넓은 범위의 스코프이다. 프로토 타입 : 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 이다. 빈 스코프는 다음과 같이 지정할 수 있다. 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component public class FixDiscountPolicy implem..

Article Thumbnail
애노테이션 @PostConstruct , @PreDestory

스프링 핵심 원리/빈 생명주기 콜백 2021. 1. 2. 02:47

Class package hello.core.lifeCycle; // javax는 자바에서 공식적으로 지원하는 것들 import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class NetworkClient{ private String url; public NetworkClient() { System.out.println("생성자 호출 , url = " + url); } public void setUrl(String url) { this.url = url; } // 서비스 시작시 호출 public void connect(){ System.out.println("Connect : " + url); } public v..

빈 등록 초기화 , 소멸 메소드

스프링 핵심 원리/빈 생명주기 콜백 2021. 1. 2. 02:40

설정 정보에 @Bean(InitMethod="init" , destroyMethod="close")처럼 초기화 , 소멸 메소드를 지정할 수 있다. Class public class NetworkClient{ private String url; public NetworkClient() { System.out.println("생성자 호출 , url = " + url); } public void setUrl(String url) { this.url = url; } // 서비스 시작시 호출 public void connect(){ System.out.println("Connect : " + url); } public void call(String message){ System.out.println("Call :..

인터페이스 InitializingBean , DisposableBean

스프링 핵심 원리/빈 생명주기 콜백 2021. 1. 2. 02:23

Class public class NetworkClient implements InitializingBean , DisposableBean { private String url; public NetworkClient() { System.out.println("생성자 호출 , url = " + url); } public void setUrl(String url) { this.url = url; } // 서비스 시작시 호출 public void connect(){ System.out.println("Connect : " + url); } public void call(String message){ System.out.println("Call : " + url + " message : "+ message); ..

빈 생명주기 콜백 시작

스프링 핵심 원리/빈 생명주기 콜백 2021. 1. 2. 02:16

데이터베이스 커넥션 풀이나 , 네트워크 소켓 처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고 , 애플리케이션 종료시점에 연결을 모두 종료하는 작업을 진행 하려면 , 객체의 초기화와 종료 작업이 필요하다. 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자 스프링은 간단하게 다음과 같은 라이프 사이클을 거친다. "객체 생성" → "의존관계 주입" (생성자 주입은 예외) 스프링 빈은 객체를 생성하고 , 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 해준다. 스프링 빈의 ..

자동 , 수동 스프링 빈 등록의 올바른 실무 운영 기준

스프링 핵심 원리/의존관계 자동 주입 2021. 1. 2. 01:40

편리한 자동 기능을 기본으로 사용하자 그러면 어떤 경우에 컴포넌트 스캔과 자동 주입을 사용하고 , 어떤 경우에 설정 정보를 통해서 수동으로 빈을 등록하고 , 의존관계도 수동으로 주입해야 할까? 결론부터 이야기하면 , 스프링이 나오고 시간이 갈 수록 점점 자동을 선호하는 추세다. 스프링은 @Component뿐만 아니라 @Controller , @Service , @Repository처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 거기에 더해서 최근 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고 , 스프링 부트의 다양한 스프링 빈들도 조건이 맞으면 자동으로 등록하도록 설계 했다. 그리고 결정적으로 자동 빈 등록을 사용해도 OCP , DIP를 지킬 수 있다. 그러면 수동..

2021

기록/History 2021. 1. 2. 00:25

2020-08-05

Article Thumbnail
Annotation 직접 만들기

기록/Spring 2021. 1. 2. 00:19

@Qualifier에 대해 의존성 주입 애노테이션 @Autowired 스프링 프레임워크에서 제공하는 애노테이션이다. @Autowired는 타입 매칭을 시도 하고 , 여러 빈이 있으면 필드 이름(파라미터 이름)으로 빈 이름을 추가 매칭한다. ac.getBean(클래스.class) write-read.tistory.com @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다. 다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Ret..

Lombok 사용해보기

기록/Spring 2020. 12. 30. 23:13

build.gradle plugins { id 'org.springframework.boot' version '2.3.7.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' //lombok 설정 추가 시작 configurations { compileOnly{ extendsFrom annotationProcessor } } //lombok 설정 추가 끝 repositories { mavenCentral() } dependencies { implementation 'org.springfra..

Article Thumbnail
의존성 주입 애노테이션(@Autowired,@Resource,@Inject)

기록/Spring 2020. 12. 30. 22:29

@Autowired 스프링 프레임워크에서 제공하는 애노테이션이다. @Autowired는 타입 매칭을 시도 하고 , 여러 빈이 있으면 필드 이름(파라미터 이름)으로 빈 이름을 추가 매칭한다. ac.getBean(클래스.class) 이 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다) 필드 , 생성자 , Setter에 붙일 수 있다. 단, 필드 또는 Setter에 붙여서 사용할 경우 반드시 기본 생성자가 정의 되어 있어야 한다. @Resource 자바에서 제공하는 애노테이션이다. @Resource는 주입하려고 하는 객체의 이름(인스턴스 명)이 일치하는 객체를 자동으로 주입한다. 필드 , Setter에 붙일 수 있다. 반드시 기본 생성자가 정의 되어 있어야 한다. @Inject @Inject는 ..