스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글 톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다 싱글톤 : 기본 스코프 , 스프링 컨테이너의 시작과 종료까지 유지 되는 가장 넓은 범위의 스코프이다. 프로토 타입 : 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 이다. 빈 스코프는 다음과 같이 지정할 수 있다. 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component public class FixDiscountPolicy implem..
설정 정보에 @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 :..
데이터베이스 커넥션 풀이나 , 네트워크 소켓 처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고 , 애플리케이션 종료시점에 연결을 모두 종료하는 작업을 진행 하려면 , 객체의 초기화와 종료 작업이 필요하다. 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자 스프링은 간단하게 다음과 같은 라이프 사이클을 거친다. "객체 생성" → "의존관계 주입" (생성자 주입은 예외) 스프링 빈은 객체를 생성하고 , 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 해준다. 스프링 빈의 ..
편리한 자동 기능을 기본으로 사용하자 그러면 어떤 경우에 컴포넌트 스캔과 자동 주입을 사용하고 , 어떤 경우에 설정 정보를 통해서 수동으로 빈을 등록하고 , 의존관계도 수동으로 주입해야 할까? 결론부터 이야기하면 , 스프링이 나오고 시간이 갈 수록 점점 자동을 선호하는 추세다. 스프링은 @Component뿐만 아니라 @Controller , @Service , @Repository처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 거기에 더해서 최근 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고 , 스프링 부트의 다양한 스프링 빈들도 조건이 맞으면 자동으로 등록하도록 설계 했다. 그리고 결정적으로 자동 빈 등록을 사용해도 OCP , DIP를 지킬 수 있다. 그러면 수동..
@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..
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..
@Autowired 스프링 프레임워크에서 제공하는 애노테이션이다. @Autowired는 타입 매칭을 시도 하고 , 여러 빈이 있으면 필드 이름(파라미터 이름)으로 빈 이름을 추가 매칭한다. ac.getBean(클래스.class) 이 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다) 필드 , 생성자 , Setter에 붙일 수 있다. 단, 필드 또는 Setter에 붙여서 사용할 경우 반드시 기본 생성자가 정의 되어 있어야 한다. @Resource 자바에서 제공하는 애노테이션이다. @Resource는 주입하려고 하는 객체의 이름(인스턴스 명)이 일치하는 객체를 자동으로 주입한다. 필드 , Setter에 붙일 수 있다. 반드시 기본 생성자가 정의 되어 있어야 한다. @Inject @Inject는 ..
스프링 핵심 원리/프로토 타입 스코프 2021. 1. 2. 15:01
스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글 톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다 싱글톤 : 기본 스코프 , 스프링 컨테이너의 시작과 종료까지 유지 되는 가장 넓은 범위의 스코프이다. 프로토 타입 : 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 이다. 빈 스코프는 다음과 같이 지정할 수 있다. 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component public class FixDiscountPolicy implem..
스프링 핵심 원리/빈 생명주기 콜백 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 :..
스프링 핵심 원리/빈 생명주기 콜백 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를 지킬 수 있다. 그러면 수동..
기록/History 2021. 1. 2. 00:25
2020-08-05
기록/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..
기록/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..
기록/Spring 2020. 12. 30. 22:29
@Autowired 스프링 프레임워크에서 제공하는 애노테이션이다. @Autowired는 타입 매칭을 시도 하고 , 여러 빈이 있으면 필드 이름(파라미터 이름)으로 빈 이름을 추가 매칭한다. ac.getBean(클래스.class) 이 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다) 필드 , 생성자 , Setter에 붙일 수 있다. 단, 필드 또는 Setter에 붙여서 사용할 경우 반드시 기본 생성자가 정의 되어 있어야 한다. @Resource 자바에서 제공하는 애노테이션이다. @Resource는 주입하려고 하는 객체의 이름(인스턴스 명)이 일치하는 객체를 자동으로 주입한다. 필드 , Setter에 붙일 수 있다. 반드시 기본 생성자가 정의 되어 있어야 한다. @Inject @Inject는 ..