Spring Framework/Spring boot: 66개의 글
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..
자바에서 요일(day of week)을 구하는 간단한 방법(원문:http://www.leveluplunch.com/java/examples/get-day-of-week/) Java CalendarCalendar cal = Calendar.getInstance();cal.set(Calendar.MONTH, Calendar.APRIL);cal.set(Calendar.DAY_OF_MONTH, 4);cal.set(Calendar.YEAR, 2016);int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);assertEquals(Calendar.FRIDAY, dayOfWeek); Java 8LocalDate date = LocalDate.of(2016, Month.APRIL, 4);Da..
스프링 비동기와 자바8의 CompletableFuture Spring Async and Java’s 8 CompletableFuture[원문: https://www.javacodegeeks.com/2016/04/spring-async-javas-8-completablefuture.html] 아래는 '비동기' 유저찾기 메소드의 예제의 구현이다. (전체 소스는 여기)1@Async2public Future findUser(String user) throws InterruptedException {3 System.out.println("Looking up " + user);4 User results = restTemplate.getForObject("https://api.github.com/users/" + u..
스프링에서 @Async로 비동기처리하기 @Async in Spring[원문: http://www.baeldung.com/spring-async] 1. 개요 Overview이 글에서 스프링의 비동기 실행 지원asynchronous execution support과 @Async annotation에 대해 살펴볼 것이다. 간단히 설명하면, @Async 어노테이션을 빈bean에 넣으면 별도의 쓰레드에서 실행되는 것이다. 이를테면 호출자는 호출된 메소드가 완료될 때까지 기다릴 필요가 없다. 2. Async 기능 켜기 Enable Async Support자바 설정Java configuration으로 비동기 처리enabling asynchronous processing를 쓰려면 간단히 설정 클래스에 @EnableAs..