Spring
-
[10] 추상화 - Resource 추상화Spring/Spring 핵심 기술 2020. 4. 21. 09:51
SpringFramework에서는 java.net.URL interface를 org.springframework.core.io.Resource interface type으로 상속 받아 추상화합니다. java.net.URL에는 resource 접근과 관리에 대한 기능이 부족하여 org.springframework.core.io.Resource로의 추상화를 통해 필요한 기능들을 지원하고 있습니다. 다음은 부족한 기능들의 예입니다. class path 기준으로 resource를 읽어오는 기능이 필요하지만 java.net.URL에서는 필요로 하는 기능을 제공하지 않습니다. java.net.URL에는 ServletContext를 기준으로 상대 경로를 읽어오는 기능이 없습니다. 새로운 핸들러를 등록하여 특별한 UR..
-
[09] ApplicationContext - ResourceLoaderSpring/Spring 핵심 기술 2020. 4. 21. 09:15
ResourceLoader는 이름과 같이 resource를 loading하는 기능을 제공하는 interface이며 ApplicationContext는 ResourceLoader를 상속받고 있어 ApplicationContext에서도 해당 기능을 사용할 수 있습니다. public interface ApplicationContext extends ResourcePatternResolver { ... } public interface ResourcePatternResolver extends ResourceLoader { ... } [resource 가져오기] ResourceLoader의 getResource() method는 Resource type의 객체를 반환 합니다. 다음은 getResource() me..
-
[08] ApplicationContext - ApplicationEventPublisherSpring/Spring 핵심 기술 2020. 4. 19. 09:25
Spring은 event programming을 위한 ApplicationEventPublisher라는 interface(옵저버 패턴 구현체)를 제공하고 있으며 ApplicationContext는 ApplicationEventPublisher를 상속받고 있습니다. 따라서 IoC Container에서 event programming을 위해 필요한 기능을 사용할 수 있습니다. [event의 정의] event를 정의하는 class를 먼저 만들어줍니다. 여기서는 MyEvent.java로 만들겠습니다. Spring 4.2 이전 버전에서는 ApplicationEvent라는 class를 상속받아 만듭니다. public class MyEvent extends ApplicationEvent { private int my..
-
[07] ApplicationContext - MessageSourceSpring/Spring 핵심 기술 2020. 4. 17. 09:06
MessageSource는 i18n 기능을 제공하는 interface로써 Message의 다국화 기능을 지원합니다. ApplicationContext는 MessageSource를 상속받으므로 해당하는 모든 기능을 ApplicationContext에서 사용할 수 있습니다. resources 아래에 "messages_" + Locale + ".properties" file (예: messages_ko_KR.properties)을 생성하고 message key, value pair들을 입력 후 build합니다(message resource 변경 후 build하지 않으면 변경사항이 적용되지 않음에 주의). 이후 Spring application 기동 시 ResourceBundleMessageSource에 의해 ..
-
[06] ApplicationContext - EnvironmentCapable interfaceSpring/Spring 핵심 기술 2020. 4. 16. 10:52
EnvironmentCapable은 Profile과 Property를 다루는 interface입니다. ApplicatioinContext는 EnvironmentCapable을 상속받기 때문에 IoC Container에서 Profile과 Property를 다룰 수 있습니다. public interface ApplicationContext extends EnvironmentCapable { ... } [Profile] Profile은 환경에 따라 사용할 bean들의 묶음을 미리 정해놓고 필요에 따라 선택하여 사용할 수 있는 기능을 말합니다. 이를 활용하여 개발환경과 배포환경 또는 각각의 다른 배포환경 별로 profile을 만들어 놓고 환경에 따라 원하는 profile로 전환하여 그에 상응하는 bean들로 a..
-
[05] ApplicationContext - Bean의 scopeSpring/Spring 핵심 기술 2020. 4. 14. 09:48
[Bean의 Scope] Bean에는 여러 가지 scope가 있고 default는 singleton scope입니다. scope에 대한 여러 가지 테스트를 위해 먼저 두 개의 bean과 application runner를 등록합니다. 먼저 Proto bean입니다. @Component public class Proto { } 다음으로 Proto를 주입받아 getter로 제공하는 Single Bean입니다. @Component public class Single { @Autowired Proto proto; public Proto getProto() { return proto; } } 마지막으로 ApplicationRunner를 구현한 AppRunner입니다. 여기서는 Single bean과 Proto b..
-
[04] ApplicationContext - @Component와 Component ScanningSpring/Spring 핵심 기술 2020. 4. 14. 09:16
Component scanning은 @Component(@Controller, @Service, @Repository, @Configuration)가 붙어있는 class를 찾아서 bean을 생성하여 application context에 등록하는 작업을 말합니다. @ComponentScan을 사용하여 원하는 package로 부터 component scanning을 할 수 있습니다. @ComponentScan 어노테이션의 basePackageClasses 옵션에 class file을 지정하면 BeanFactoryPostProcessor를 상속 받는 ConfigurationClassPostProcessor에 의해 class file이 위치한 package 부터 하위의 모든 package에 대해 componen..
-
[03] ApplicationContext - @Autowired를 통한 Dependency InjectionSpring/Spring 핵심 기술 2020. 4. 13. 12:02
생성하고자 하는 bean을 A라 하고 A를 생성하기 위해 필요한 또다른 bean을 B라 할 때 @Autowired는 bean A 생성 시 bean B를 IoC(Inversion of Control) Container로 부터 주입받기 위한 annotation입니다. 반드시 IoC Container에 Bean으로 등록된 객체만이 @Autowired를 통해 다른 Bean들에게 주입될 수 있습니다. 예를 들어 다음과 같이 Bean이 아닌 객체의 class가 있고 public class PetRepository { public Pet save(Pet pet) { return null;} } Bean을 생성할 때 위의 PetRepository class로 생성한 Bean이 아닌 객체를 주입하려고 시도해보면 @Ser..