spring ioc: 10개의 글
Servlet에서 스프링 ApplicationContext 사용하기 pom.xml org.springframework spring-webmvc 5.1.3.RELEASE 스프링 ApplicationContext, 즉 스프링 IoC를 사용하려면 관련 의존성을 추가해야 한다. spring-context 라이브러리를 가져올 수 있도록 의존성을 추가한다. 위 예제에서는 spring-webmvc를 가져오도록 했지만 spring-context만 가져와도 된다. web.xml org.springframework.web.context.ContextLoaderListener contextClass org.springframework.web.context.support.AnnotationConfigWebApplication..
[Spring] ResourceLoader로 텍스트 파일 출력하기 (Java 11) Spring의 ApplicationContext는 ResourceLoader라는 인터페이스를 상속한다. 이 인터페이스는 이름에서부터 알 수 있듯 리소스를 읽어오는 기능을 제공한다. 1. Resource 객체 얻기 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.io.Resource; import org.springfr..
[Spring] Spring 어플리케이션 메시지 다국어 및 재로딩 처리 Spring IoC 컨테이너 = ApplicationContext가 갖고있는 기능 중 MessageSource는 국제화(i18n)와 관련된 기능을 제공해주는데 이를 이용해서 어플리케이션에서 출력하는 메시지를 다국화할 수 있다. 1. 메시지 파일 작성 resources 디렉토리 아래에 messages.properties, messages_ko_KR.properties 파일을 새로 생성한다. 여기에 어플리케이션에서 출력할 메시지를 messages.properties에는 영어로, messages_ko_KR.proeprties에는 한국어로 작성할 것이다. 파일명에 오타가 나지 않도록 조심하자. 파일을 생성하고 나면 자동으로 'messages..
[Spring] EnvironmentCapable - Property 사용하기 ApplicationContext는 EnvironmentCapable을 상속받으며, EnvironmentCapable이 제공하는 주요 기능에는 profile과 property가 있다. 본 포스팅에서는 그 중 property에 대해 살펴본다. 1. Property 기능 어플리케이션에서 사용되는 여러가지 key, value 쌍으로 제공되는 프로퍼티에 간편하게 접근할 수 있는 기능이다. Spring은 프로퍼티에 '계층형'으로 접근하는데 계층형으로 접근한다는 말은 프로퍼티에 우선순위가 있다는 뜻이다. 프로퍼티는 다양한 형태로 어플리케이션에 제공될 수 있는데 key가 동일하면 우선순위가 더 높은 프로퍼티의 value를 가져온다. 2. ..
[Spring] EnvironmentCapable - Profile 사용하기 Spring의 ApplicationContext는 BeanFactory 기능만 하는건 아니다. ApplicationContext가 상속받는 다양한 인터페이스들 ApplicationContext가 상속받는 다양한 인터페이스들 중 EnvironmentCapable 인터페이스는 'Profile(프로파일)' 이라는 기능을 제공한다. Profile(프로파일)의 개념 프로파일 = 빈들의 묶음 프로파일은 특정 실행 환경에서 사용할 빈들의 묶음이다. 테스트 환경에서 사용할 빈 묶음과 프로덕션(운영) 환경에서 사용할 빈 묶음이 서로 다를 수 있다. 또 각 환경에 따라 서로 다른 빈들을 써야하는 경우, 특정 환경에서만 등록해야하는 빈들이 있는 경..
[Spring] 빈의 Scope - 싱글톤과 프로토타입 빈을 등록할 때 아무런 설정을 하지 않으면 기본적으로 빈은 싱글톤 scope을 갖는다. 싱글톤 scope이란 어플리케이션 전반에 걸쳐 해당 빈의 인스턴스를 오직 하나만 생성해서 사용하는 것이다. 1. Singleton Scope Single, Proto 클래스를 새로 만들고 @Component를 붙여 빈으로 등록한다. Single.java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Single { @Autowired private Proto proto;..
[Spring] Component Scan과 Function을 사용한 빈 등록 방법 1. @ComponentScan @ComponentScan 애노테이션은 spring 3.1부터 도입됐으며 설정된 시작 지점부터 컴포넌트 클래스를 scanning하여 빈으로 등록해주는 역할을 한다. 컴포넌트 클래스는 다음 애노테이션이 붙은 클래스를 의미한다. @Component @Repository @Service @Controller @Configuration @ComponentScan의 가장 중요한 두 가지 속성은 component를 scan할 시작 지점을 설정하는 속성과 scan한 component 중 빈으로 등록하지 않을 클래스를 제외하는 필터 속성이다. 1) Scan 시작 지점 설정 - basePackages()와..
[Spring] @Autowired의 다양한 사용 방법 - required, Primary, Qualifier 1. 의존객체 타입의 빈이 없는 경우 다음과 같이 BookService 클래스와 BookRepository 인터페이스가 있다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class BookService { BookRepository bookRepository; @Autowired public BookService(BookRepository bookRepository) { this.bookRepository = boo..
[Spring] 빈을 설정하는 3가지 방법 - XML, JAVA, Component Scan 새 프로젝트를 생성한다. 예제 코드에 필요한 의존성을 받기 위해 spring boot 프로젝트를 생성할 것이다. 참고로 예제 코드에는 이 의존성이 필요하다. Spring Initializr를 선택하고 Next를 클릭한다. Group, Artifact, Name을 입력하고 Next를 클릭한다. Group은 패키지명을 적어준다. (보통 도메인명을 뒤집어서..) Web - Spring Web을 넣고 Next를 클릭한다. Finish를 클릭해서 신규 프로젝트 생성을 완료한다. Spring boot 프로젝트를 만들었다. pom.xml을 열어보면 spring boot 2.2.5 버전으로 만들어졌음을 확인할 수 있다. 우측의..
[Spring] 왜 자바 객체를 IoC 컨테이너의 빈으로 만들까? IoC는 spring을 통해서만 적용할 수 있는게 아니며 일반 자바 객체로 DI를 직접 구현할수도 있다. 그런데도 spring의 IoC 컨테이너를 사용하는 이유는 다음과 같다. DI(Dependency Injection, 의존성 주입) DI를 직접 구현하는 것 보다 spring에서 제공하는 IoC 컨테이너의 DI를 이용하는 것이 편리하고 효율적이다. 객체의 Scope 자바 객체를 IoC 컨테이너의 빈으로 만들면 객체의 scope를 관리하기 용이하다. IoC 컨테이너에서 관리되는 빈들은 기본적으로 싱글톤 scope로 등록된다. 따라서 어플리케이션 전반적으로 오로지 하나의 인스턴스만 사용해도 되는 객체라면 IoC 컨테이너에 빈으로 등록해서 아..