Spring Framework: 317개의 글
Spring Tips: The Spring Framework *Utils Classes 를 보고 정리하면 좋겠다고 생각했다.전체 예제DemoClass@Data @Slf4j @AllArgsConstructor @NoArgsConstructor public class DemoClass { private List list = new ArrayList(); @PostConstruct public void begin() { log.info("begin"); } }org.springframework.util.Assert@Test public void assertIsNull() throws Exception { demoClass.setList(null); Assert.isNull(demoClass.getList(),..
Bean Scope를 좀 살펴보다가 아래와 같은 테스트를 돌려보았다.@Configuration public class BeanScopeConfig { @Bean public AccountService accountService() { AccountService accountService = new AccountService(); accountService.setAccountRepository(accountRepository()); return accountService; } @Bean @Scope(scopeName = "prototype") public AccountRepository accountRepository() { return new AccountRepository(); } } public cl..
앞서 bean 등록(registry)과 getBean 메소드 호출 과정을 살펴보았다. 간단하게 다시 정리해보자면bean 등록 : 메타데이터를 통해 BeanDefinition을 Map에 저장한다.getBean처음 호출 GenericBeanDefinition을 RootBeanDefinition으로 재 정의 후 Map에 저장bean instance 생성 후 Map에 저장 후 반환2번 이상 호출Map에 bean instance 꺼내와 반환 예제로 설명한 AnnotationConfigApplicationContext는 DefaultListableBeanFactory를 통해 대부분에 기능을 위임하고 있는 것을 확인했다. 그렇다면 BeanFactory와 ApplicationContext는 무엇일까? 이번 글에서 알아..
Spring IoC Container를 까보자 #Bean 등록은 어떻게 될까? 라는 글에서 IoC Container인 BeanFactory와 ApplicationContext에서 어떻게 Bean을 등록하고 보관하는지 알아보았다. 이번 글에서는 등록된 Bean 정확히 말하면 BeanDefinition을 어떻게 instance 화 후 반환 하는지 알아보자.getBean 메소드의 정체@Configuration public class BeanConfig { @Bean public AccountService accountService() { AccountService accountService = new AccountService(); accountService.setAccount..
Spring에서 IoC Container 역할을 하는 BeanFactory 와 ApplicationContext 동작 방법이 궁금했다. 작년 SLiPP에서 스터디를 했었는데, 다시 한번 블로그에 정리하려 한다.스프링 구조 일단 스프링에서 BeanFactory와 ApplicationContext의 다이어그램을 보자. 사실 스프링 구조를 잘 이해하지 못하고 다이어그램만 보고는 각각의 interface와 class가 어떤 역할을 하는지 도통 알 수 없다.핵심은 BeanFactory와 ApplicationContext다.ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class); Annotation..
전체 예제 : https://github.com/woniper/spring-example/tree/master/spring-boot-custom-bean-name-generator좀더 훌륭한 문서 : https://spring.io/blog/2013/12/03/spring-framework-4-0-and-java-generics 스프링 4.0 부터 자바 제네릭 타입을 주입받을 수 있다. 4.0 미만 버전도 가능은 했지만 번거로운 추가 작업이 필요했다. 예를들어Notification 인터페이스를 구현한 3개의 구현체가 있다고 예를 들자. 12@Autowirdprivate List notifications;cs 4.0 이상부터는 Notification List Type으로 주입이 가능해졌다. 매우 편리하다...
Rest API Version Path 문제 Rest API를 만드는데 version 관리가 되어야한다.예를 들면http://localhost:8080/v1/foohttp://localhost:8080/v2/foo와 같은 URL이 필요하다. Spring에서는 @RequestMapping에 value값으로 URL을 설정할 수 있다. 위 URL을 @RequestMapping으로 표현해보자. 1234567891011@RestControllerpublic class SampleController { @RequestMapping(value = "/v1/foo") public ResponseEntity v1Foo() { return ResponseEntity.ok("v1 foo"); } @RequestMapping..
앞서 SpringApplication Class를 보면서 run 메소드 안에 StopWatch라는 클래스를 본적이 있다. 클래스 명만 보고 그냥 StopWatch 기능을하는 클래스구나하고 넘어갔는데, 오늘 문뜩 그 클래스가 생각이나서 한번 봤는데 역시나다. (java-doc 문서) SpringApplication 클래스에서 StopWatch에 사용되는 메소드는 start, stop 를 사용하고 객체를 StartupInfoLogger.logStarted 메소드에 파라미터로 넘긴다. start12345678public void start(String taskName) throws IllegalStateException { if (this.running) { throw new IllegalStateExcept..
오늘은 어떤 코드를 살펴볼까 고민하다가. 로컬 환경에 셋팅해 놓은 스프링 부트 패키지를 살펴보다가 actuator 패키지가 눈에 들어왔다. 스프링 부트에서는 actuator라는 멋진 녀석이 있는데, 이는 실행 중인 서버에 상태값이나 여러가지 정보를 확인 할 수 있는, 말하자면 모니터링 가능한 데이터를 자동으로 제공한다. 잘 와닿지 않을 수 있는데 오늘 살펴본 actuator에서 BeanEndPoint Class가 하는 역할은 localhost:8080/beans 라는 url로 요청하면 현재 스프링 부트로 동작하는 서버에 bean으로 등록된 bean 리스트를 json 형태로 응답한다. 즉, localhost:8080에서 관리되는 bean 리스트를 조회한다는 것인데, 이런식으로 자동으로 제공되는 모니터링 가..
스프링 부트가 요즘 굉장히 핫!! 하다.MSA가 유행하면서 그에 발맞춰 여러가지 프로젝트가 쏱아져 나오는 느낌이랄까? 스프링 부트가 처음 나왔을때 굉장히 충격이였다. 내가 처음 스프링을 접했을 때에는 설정이 너무 어렵고 왜 이렇게 복잡한 설정을 해야만 겨우겨우 request를 한번 날릴 수 있을까 생각했었다. 스프링 부트는 이런 어려운 설정을 자동으로 해준다. 부트가 이런 장점만 있는건 아니지만 가장 눈에 띄는 장점 중 하나 아닐까 생각된다. 오늘은 스프링 부트 기반 프로젝트를 실행하기 위해 필요한 SpringApplication라는 class를 살펴보았다. 먼저 SpringApplication Class를 이용해 실행하는 코드를 보자.12345678@SpringBootApplicationpublic c..