본문 바로가기

반응형

개발/Spring

Resource 추상화 Resource 추상화 특징 - java.net.URL 을 추상화 한 것. - 스프링 내부에서 많이 사용하는 인터페이스 java.net.URL을 왜 추상화 했을까?? - java.net.URL 는 classpath 기준으로 가져오는 것이 없었다. - ServletContext를 기준으로 상대 경로를 읽어오는 기능이 부족 - 새로운 핸들러를 등록하여 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족하다! 이러한 이유로 Resource를 만들었다. 구현체 - UriResource : java.net.URL 참고, 기본으로 지원하는 프로토콜 http, https, ftp, file, jar - ClassPathResource : 지원하는 접두어 classpath - FileSys.. 더보기
Ioc 컨테이너 - ResourceLoader ResourceLoader - 리소스를 읽어오는 기능을 제공하는 인터페이스 리소스 로더의 역할을 한다. ApplicationContext extends ResourceLoader >> ApplicationContext 를 받아서 사용할 수 도 있고, ResourceLoader을 받아서 할 수 도있다. 명확하게 ResourceLoader 을 받아서 하는 것을 추천한다. 1. ResourceLoader을 이용해 리소스 파일 읽어오기 1) 클래스패스로 읽어오기 - 리소스 파일 생성 - 소스 package com.bpkim.demospring51; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.bo.. 더보기
IoC - ApplicationEventPublisher ApplicationEventPublisher - ApplicationEventPublisher는 Spring의 ApplicationContext가 상속하는 인터페이스 중 하나. - 스프링 이벤트 프로그래밍에 필요한 인터페이스 - 옵저버 패턴 구현체 1. ApplicationEvent 상속받은 Event 선언 package com.bpkim.demospring51; import org.springframework.context.ApplicationEvent; public class MyEvent extends ApplicationEvent { private int data; public MyEvent(Object source) { super(source); } public MyEvent(Object so.. 더보기
IoC - MessageSource ApplicationContext 에서 상속하는 MessageSource 인터페이스를 이용! 국제화(i18n) 기능을 제공하는 인터페이스 1. 메시지 소스 파일 생성 - 리소스 아래에 messages.properties / messages_ko_KR.properties 파일 생성 스프링 부트를 사용하면 Resource Bundle 이 빈으로 등록 되어 별다른 설정 없이 messages.priperties 파일을 사용 가능하다. - message.properties 파일 내용 2. 메시지 호출 package com.bpkim.demospring51; import org.springframework.beans.factory.annotation.Autowired; import org.springframewor.. 더보기
IoC - Environment - 프로퍼티 키 벨류 상으로 되어 있는 프로퍼티에 접근 하여 사용 계층 형 으로 제공됨. OS의 환경 변수, 자바 실행시 옵션 값 등에 전달된 키 벨류 값을 이용. 1. VM 옵션 package com.bpkim.demospring51; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; .. 더보기
IoC - Environment - 프로파일 ApplicationContext이 상속하고 있는 것들 중 EnvironmentCapable을 알아본다. 1. 프로파일 - 빈들이 묶음 - 운영에서는 이런 기능을 쓰겠다. 개발에서는 이런 기능쓰겠다. 이처럼 각각의 상황에 따라 다른 빈을 사용하는경우를 위해 프로파일 이라는 기능이 생겼다. - ApplicationContext의 Environment라는 인터페이스를 통해 사용 - ApplicationContext가 상속하고 있는 EnvironmentCapable 이 Environment를 가지고 있어 이를 이용한다. - 프로파일 확인 하는 소스 아래 import org.springframework.beans.factory.annotation.Autowired; import org.springframewor.. 더보기
IoC - 빈의 스코프 스코프 - 싱글톤 - 프로토타입 : 새로운 인스턴스를 만들어서 써야하는 스코프 1. 스코프 - 싱글톤 빈 두개 설정 ApplicationRunner를 상속한 AppRunner 를 만들어 생성된 빈을 확인 실행결과 - 같은 빈인 것을 확인 할 수 있다. 거의 대부분은 싱글톤으로 사용하겠지만 빈을 계속 바꿔주어야 하는경우엔 프로토타입 스코프를 설정하여 매번 새롭게 빈을 만들도록 한다. 2. 스코프 - 프로토타입 - 스코프 프로토 타입 설정 : 빈을 받아 올때만 새롭게 생성한다. 확인 하기 위해 AppRunner 클래스 변경 실행하여 확인 - Proto는 매번 다른 Bean인 것이 보이고 Single는 하나의 Bean 인 것을 확인 할 수 있다. 그런데?? 프로토 타입 스코프의 빈에서 싱글톤 스코프의 빈을 사.. 더보기
IoC - Component, 컴포넌트 스캔 어노테이션 - 스프링 3.1 부터 도입 - basePackage 가 가장 중요한 것(?) basePackage - 가장 중요한 설정 - 원래는 문자열 값 - 문자열은 Type safe 하지 않는다. - basePackageClasses 값을 이용하면 Type safe 하게 사용 할 수 있다. - basePackageClasses 값에 전달된 값 을 시작하여 컴포넌트 스캔을 한다. 등록해야하는 bean 이 많은 경우에 컴포넌트스캔(@ComponentScan)의 단점 - 빈 등록은 초기 구동시 생성 많은 경우는 초기 구동 시간이 오래 걸릴 수 있다. ** 구동 후에는 또 다른 빈을 만들어내거나 하는 경우가 없다. 평션 사용한 빈 등록 - 스프링 5부터 - 리플렉션이나 프로시기법을 사용하지 않기 때문에 성능에.. 더보기

반응형