실제로 컴파일된 결과물 .class 파일
에는 코드가 생성
되어 있다1. 접근자/설정자 자동 생성
1)@Getter와 @Setter 특정 필드에 어노테이션을 붙여주면, 자동으로 생성된 접근자(Getter)와 설정자(Setter) 메소드 생성자 자동 생성
2)@NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성
3) @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 생성
4)@RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 생성
4)@NonNull 어노테이션을 변수에 붙이면 자동으로 null 체크를 해준다. 즉, 해당 변수가 null로 넘어온 경우, NullPointerException 예외를 일으켜 줍니다.
@NonNull @Setter
private String id;
obj.setId(null); // NullPointerException 발생
2. toString() 메소드 자동 생성
@ToString 어노테이션만 클래스에 붙여주면 자동으로 생성
3. equals, hashCode 자동 생성
1) @EqualsAndHashCode 어노테이션을 사용하면 자동으로 equals, hashCode 메소드를 생성할 수 있습니다.
2) @EqualsAndHashCode(callSuper = true)
public class User extends Domain {
private String username;
private String password;
}
callSuper 속성을 통해 equals와 hashCode 메소드 자동 생성 시 부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있다.
즉, callSuper = true로 설정하면 부모 클래스 필드 값들도 동일한지 체크하며, callSuper = false로 설정(기본값)하면 자신 클래스의 필드 값들만 고려
3. @Data
@Data는 위에서 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정
해주는 매우 유용한 어노테이션
@Data
public class User {
// ...
}
이름 | 설명 |
---|---|
@Controller | 해당 클래스가 Controller임을 나타내기 위한 어노테이션 |
@RequestMapping | 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션 |
@RequestParam | Controller 메소드의 파라미터와 웹요청 파라미터와 맵핑하기 위한 어노테이션 |
@ModelAttribute | Controller 메소드의 파라미터나 리턴값을 Model 객체와 바인딩하기 위한 어노테이션 |
@SessionAttributes | Model 객체를 세션에 저장하고 사용하기 위한 어노테이션 |
@RequestPart | Multipart 요청의 경우, 웹요청 파라미터와 맵핑가능한 어노테이션(egov 3.0, Spring 3.1.x부터 추가) |
@CommandMap | Controller메소드의 파라미터를 Map형태로 받을 때 웹요청 파라미터와 맵핑하기 위한 어노테이션(egov 3.0부터 추가) |
@ControllerAdvice | Controller를 보조하는 어노테이션으로 Controller에서 쓰이는 공통기능들을 모듈화하여 전역으로 쓰기 위한 어노테이션(egov 3.0, Spring 3.2.X부터 추가) |
@RequestMapping
@ResponseBody
클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜, 객체에 저장한다.
서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다.
@Component
Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 annotation이다. 즉, scan-auto-detection(스캔 자동감지)와 dependency injection(의존성 주입)을 사용하기 위해서 사용되는 가장 기본 어노테이션이다.
@Required
@Required
public void setName(String name) {
this.name = name;
}
@Autowired
@Autowired
private DefaultBeanValidator beanValidator;
@Inject
객체의 타입을 보고 주입될 클래스를 탐색한다.
@Autowired와 차이점은
@Autowired는 스프링에서 지원하고, @Inject은 자바에서 지원하는 어노테이션이다.
@Controller
@Controller어노테이션은 MVC패턴에서 Controller클래스에 선언, @Component어노테이션을 써도 상관없다.
하지만 @Controller 어노테이션을 사용함으로 @RequestMapping
등의 추가 어노테이션을 사용 가능
@RequestMapping 어노테이션을 해당 어노테이션 밑에서만 사용할 수 있다.
@Controller
public class AdmController {
@RequestMapping
http request로 들어오는 url 특정 controller 클래스나 메서드로 연결시키는 역할
controller에 class에 적용할 수 있고 특정 method에 적용 가능
@RequestMapping(value="/adm")
public class AdmController {
@PathVariable
@RequestMapping(value="/{page}")
public String onlyPageFowarding(@PathVariable String page,Model model){
return "ttest/adm/"+page;
}
@ResponseBody
@RequestBody
@RequestMapping(value="/bi200.do")
@ResponseBody
public Map<String, Object> exSelect (
@RequestBody List<HashMap<String, String>> exc,
웹페이지에서 json으로 request 한 파라미터들을 java에서 받으려면 java object로의 변환이 필요하며
마찬가지로 response 시에도 java object에서 json으로 변환이 필요하다.
이러한 작업들을 해주는 어노테이션이 바로 @RequestBody와 @ResponseBody이다.
컨트롤러에 두 어노테이션을 추가해주면, JSON이나 key/value 방식 xml 등으로 송수신할 수 있다.
@RequestParam
단일 HTTP 요청 파라미터를 method 파라미터에 넣어주는 어노테이션
가져올 요청 파라미터 이름을 @RequestParam 어노테이션의 기본값으로 지정해주면 된다.
@RequestMapping(value="/admUpdateView.do", method=RequestMethod.POST)
public @ResponseBody Map<String, Object> adm03UpdateView(
@RequestParam("unId") String unId,
@ModelAttribute("searchVO") UserDefaultVO userSearchVO,
@ModelAttribute
@RequestParam과 비슷하고
Controller 메소드의 파라미터나 리턴 값을 Model 객체와 바인딩하기 위한 어노테이션
@Service
Service 레이어 클래스들에 사용되는 어노테이션, @Component어노테이션을 써도 상관없다.
@Service어노테이션을 사용함으로써 해당 클래스가 서비스 레이어 클래스라는 것을 명확히 함
@Service("admService")
public class AdmServiceImpl extends EgovAbstractServiceImpl implements AdmService {
@Repository