즉, Bean 등록용 class로 사용할 수 있고 일반 메소드 또한 만들수있지만 주로 Bean 을 보조하는 역할을 한다
@Bean
외부 라이브러리 등 반환되는 객체를 Bean 으로 등록한다
쉽게말하면 @Bean 어노테이션을 사용하면 new ~ 로 생성해서 import 하지않아도 된다
스프링 간 객체가 의존관계를 관리하도록 하는 것에 가장 큰 목적이다
new 로 생성하면 생성자를 그득그득 붙여서 변경가능성이 있는데, Bean 을 사용하면 변경이 안되겠지
@Configuration //여기는 @Bean 등록 전용 class!
public class TestConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
@Bean(name="myMethod")
public MyBean myBean() {
return new MyBean();
}
// @Bean 어노테이션이 없는 메소드
public SomeConfiguration someConfiguration() {
// 구성 정보 반환
return new SomeConfiguration();
}
}
Client 에서 서버로 요청 시 복수의 parameter 를 전달할 때 사용 json 기반의 Http Body 를 컨트롤러에서 자바객체로 변환 (Client 에서 보낸 json body를 객체형태로 매핑)
Client 에서 보내고싶은 데이터가 여러개 있을 경우 주로 사용된다.
아래와 같이 param 안에 데이터를 넣고
var param = {
title : "1111",
content : "hello",
userName : "admin"
}
해당 어노테이션을 넣으면 컨트롤러에서 해당 데이터를 객체로 자동 매핑한다
이때 유의할 점은 PostDto 에서 선언된 변수명과 param 에 들어있는 변수명이 완벽하게 같아야 한다
public class PostDto {
private String title;
private String content;
private String userName;
}
/////
@PostMapping(value = "/index-request")
public String indexRequest(@RequestBody PostDto postDto) {
return "/user/index";
}
만약 변수명이 같지 않은 경우 별도로 에러는 발생하지 않으며, 해당 변수만 해당 객체에 매핑되지 않는다
@ResponseBody
Client 로 data 반환 시 사용하며 객체 data 를 json 으로 바꿔 반환한다
해당 어노테이션의 위치는 return type 객체 앞에 써도 되지만, 나는 개인적으로 방법 2를 선호한다
// 방법 1
@GetMapping(value = "/index-rest")
public @ResponseBody ResponseEntity indexRest() {
//json type으로 반환하기 위하여 @ResponseBody 어노테이션이 필요함
return ApiResponseEntity
.builder()
.ok();
}
// 방법 2
@ResponseBody
@GetMapping(value = "/index-rest2")
public ResponseEntity indexRest2() {
//@ResponseBody 어노테이션은 return type 앞에 위치한것보다 현재의 형태가 제일 깔끔해 보인다
return ApiResponseEntity
.builder()
.ok();
}
위와 같은 코드로 컨트롤러에서 데이터를 보내면 Client 에서는 아래와 같은 형태로 받게된다