My Space

어노테이션

2021. 4. 16. 15:48
반응형

1. @ResponseBody

  메소드에 @ResponseBody이 존재하면 리턴되는 값은 View를 통해 출력되지 않고,

  HTTP Response Body에 직접 쓰여지게 된다. 이때, 쓰여지기전 리턴되는 데이터 타입에 따라

MessageConverter에서 변환이 이루어진 후 쓰이게 된다.

즉, @ResponseBody를 사용하면 viewResolver을 사용하지 않고 HTTP의 BODY에 문자 내용을 직접 반환 한다.

 (HTML에서의 body tag가 아님)

 

MessageConverter 의 종류

- StringHttpMessageConverter

- FormHttpMessageConverter

- ByteArrayMessageConverter

- MarshallingHttpMessageConverter

- MappingJacksonHttpMessageConverter

Jackson's ObjectMappter 를 사용하여 request, response 를 JSON 으로 변환할때 사용되는 MessageConverter 이다.

applicaton/json 을 지원한다.

- SourceHttpMessageConverter

- BufferedImagedHttpMessageConverter

 

정리하면,  @ResponseBody가 있는 메서드는 별도의 리턴 타입으로 출력할 수 있고,

@ResponseBody가 없으면 viewResolver를 통해 해당 jsp에서 처리가 이루어진다.

사용 예제)

   // hello-template.jsp 에서 실행
   @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }
    
    // hello-string 페이지 호출시 문자열 바로 출력
    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name;
    }    
    
    // 객체 반환시 객체가 JSON으로 변환된다.
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;       // 결과 값 {"name":" "}
    }
    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

 

2. 객체 사이클 어노테이션(@PostConstruct, @PreDestory)

@PostConstruct (객체 라이프 사이클 초기화)

- 초기화 작업을 할 메소드에 적용되며, WAS가 구동될 때 실행된다.

 

@PreDestory (객체 라이플 사이클 종료)

- 컨테이너에서 객체를 제거하기 전에 실행된다.

 

사용 코드

@PostConstruct
public void init() {
	System.out.println("초기화");
}

@PreDestory
public void destory() {
	System.out.println("종료");
}

 

3. 스케쥴링 어노테이션(@Schedule)

리눅스의 crontab와 같은 기능을 스프링에서 사용할 수 있다.

Schedule의 기능을 사용하기 위해서는 java configuration 관련 클래스에 @EnableScheduling를 추가한다.

 

스프링부트의 경우에는 아래와 같이 기본으로 생성되는 클래스에 넣어주면 된다.

@SpringBootApplication
@EnableScheduling
public class SampleApplication {
   public static void main(String[] args) {
      SpringApplication.run(SampleApplication.class, args);
   }
}

스프링의 경우에는 webConfig로 설정한 파일에 넣어주면 된다.

@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan
public class WebConfig implements WebMvcConfigurer {
}

사용 방법

@Scheduled(fixedDelay = "1000")    //고정된 시간 1초마다 호출
public void scheduleTest() {
	System.out.println(System.currentTimeMillis() / 1000);
}

@Scheduled 속성은 cron, fixedDelay, fixedRate가 있다.

fixedDelay는 이전 수행이 종료된 시점부터 delay후에 재 호출되고,
fixedRate는 이전 수행이 시작된 시점부터 delay후에 재 호출된다.
때문에, fixedRate로 지정 시 동시에 여러개가 돌수 있다.

'Theory' 카테고리의 다른 글

트랜잭션(Transaction)  (0) 2021.06.06
SID, Service Name 차이  (0) 2021.05.06
Intellij 단축키  (0) 2021.04.06
Spring boot  (0) 2021.04.06
도메인 관련  (0) 2021.04.01

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading