티스토리 뷰

BackEnd/Java

Annotation이란

철철22 2018. 7. 16. 13:49
반응형

- 주석이라는 사전적의미가 있으며 컴파일 혹은 런타임에 해석된다


- 메타데이터(실제데이터가 아닌 Data를 위한 데이터) 라고도 불리고 JDK5부터 등장





용도 


- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도


- 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플렉션을 이용해서 특수 기능을 추가하기 위한 용도


- 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도


자바 리플렉션: 다른언어에는 존재하지 않는 특별한 기능, 컴파일 시간이 아닌 실행시간에 동적으로 특정 클래스의 정보를 객체를 통해 분석 및 추출해내는 프로그래밍 기법




개인적으로 사용해본 스프링 부트에서의 Annotations (더 많은걸 알고싶으면 다음의 글을 추천한다. 이동


Configtations

@EnableWebSecurity (출처: 이동)

   - Spring Security에서 사용하는 어노테이션 웹 보안을 활성화한다.

@EnableWebMvc (출처: 이동)

   -  내부적으로 WebMvcConfigurationSupport클래스를 환경설정 클래스로 등록해 Spring MVC를 구성




Controller

@RestController

  - @Controller와 @ResponseBody 의 기능을 합쳐놓은 어노테이션으로써 모든 요청 메소드에 @ResponseBody를 추가해야할 필요가 없어졌다.

   

@Autowired

  - 빈간의 의존성하는 객체를 자동으로 삽입해주며 생성자, 필드, 메서드 세 곳에 적용이 가능하다.


@RequestMapping(path="/{sq}", method=RequestMethod.POST)

  - 요청 메소드에 작성하는 핸들러 매핑 어노테이션이다 


@PostMapping (path="/{sq}")

@GetMapping (path="/{sq}")

@PutMapping (path="/{sq}")

@DeleteMapping (path="/{sq}")

  - RequestMapping의 메소드들을 분류한 어노테이션들이다





Jpa entity (Persistence 관련)

1) class

@Entity

@EntityListeners(value= { BookListener.class }) (출처: 이동)

  - 엔티티를 DB에 적용하기 이전&이후 커스텀 콜백을 요청할 수 있는 어노테이션

@Table(name="info_book_tbl")



2) entity

@Id

  - 일반적으로 PK를 가지는 변수에 선언

@GeneratedValue(strategy=GenerationType.IDENTITY | TABLE | SEQUENCE | AUTO)

  - ID값을 자동으로 생성할지 전략을 선택

  - 1. AUTO : (persistence provider가) 특정 DB에 맞게 자동 선택

     2. IDENTITY : DB의 identity 컬럼을 이용
     3. SEQUENCE : DB의 시퀀스 컬럼을 이용
     4. TABLE : 유일성이 보장된 데이터베이스 테이블을 이용


@Column(name="sq", updatable=false)

  - 멤버 변수와 DB 컬럼명을 일치화 시키거나 선언 

  선언을 안할 시 DB 컬럼명과 일치 시킨다.

@JsonIgnore (추가 정보: 이동)

  - 응답 객체에 특정 필드를 추가하고 싶지 않을 때 선언

@Enumerated(EnumType.STRING)

  - Enum 타입을 DB에 저장할 때 사용


  <!--JPA 연관관계 매핑=>조인과 관련된 녀석들 중요하다 이녀석은 머루님의 블로그에서 공부하는걸 추천: 이동-->

@ManyToOne(targetEntity=Book.class)

@OneToMany(targetEntity=Member.class)

@OneToOne(targetEntity=Member.class)

@ManyToMany

@JoinColumn(name="book")




3) Listener (@EntityListeners 선언한 엔티티관련된 리스너를 설정)

@PrePersist

@PreUpdate



4) Repository

@Repository




Service

@Service

@Autowired

  - 빈간의 의존성하는 객체를 자동으로 삽입해주며 생성자, 필드, 메서드 세 곳에 적용이 가능하다. 

@value

  - application.properties등의 프로퍼티 파일의 값을 불러올 수 있다. 

  - ex).@Value("${image.upload.path}")

@PostConstruct

  - 의존하는 객체를 설정한 이후에 초기화 작업을 수행할 메서드에 적용

  - init-method속성과 같다.

@PreConstruct

  - 컨테이너에서 객체를 제거하기 전에 호출 될 메서드에 적용

  - destroy-mehotd 속성과 같다.




Lombok (설치: 이동)

  - 어노테이션을 기반으로 개발자가 get/set/tostring 등의 메소드들을 자동으로 생성해주는 고마운 라이브러   리이다. 다만 팀단위로 개발할 시 모두가 설치해야하는 단점이 있다.

@ToString

@Getter

@Setter




커스텀 어노테이션 만드는법

@interface MyAnnotation { // @interface 키워드를 이용함 으로써 어노테이션 정의 String value() default "기본값"; String name() default "철철블로그"; }



참고: http://sjh836.tistory.com/8 [빨간색코딩]

https://springframework.guru/spring-framework-annotations/

반응형

'BackEnd > Java' 카테고리의 다른 글

Java의 다형성  (0) 2018.07.18
Java Collection Framework  (0) 2018.07.17
스프링 시큐리티 _요청 가로채기  (0) 2018.07.12
HashMap  (0) 2018.07.11
JPA에 대한 소개, 활용방안, Spring 프레임워크와 통합  (0) 2018.07.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함