개발자의 서재
[Spring] Annotation 정리(Spring, Lombok, JPA) 본문
Annotation 이란?
사전적 의미는 주석. 자바에서 특정요소에 특별한 의미, 기능을 수행하도록 함.
기본적으로 어노테이션을 사용하는 순서는 다음과 같다.
1. 어노테이션을 정의한다.
2. 클래스에 어노테이션을 배치한다.
3. 코드가 실행되는 중에 Reflection 을 이용하여 추가 정보를 획득하여 기능을 실시한다.
어노테이션 자체는 아무런 동작을 가지지 않는 단순 표식이지만, Reflection 을 통해 기능이 부여된다.
Spring Annotation 종류
@ComponentScan
@Component 어노테이션이 붙은 클래스 Bean 들을 찾아서
Context에 bean 등록을 해주는 어노테이션 이다.
(@Controller, @Service, @Repository, @Configuration 는 @Component을 포함하고 있으므로,
마찬가지로 Bean 등록 대상이 된다.)
@Component
개발자가 직접 만든 class 를 Bean 으로 등록해주는 어노테이션.
@Bean 과는 다르게 name 이 아닌 value를 이용해 Bean의 이름을 지정한다.
@Component //이름을 지정하지 않을경우 클래스명을 camelCase로 변경하여 "student" 가 beanId가 됨.
public class Student {
public Student() {
System.out.println("hi");
}
}
@Component(value="mystudent")
public class Student {
public Student() {
System.out.println("hi");
}
}
@Bean
개발자가 직접 제어가 불가능한 외부 라이브러리 클래스를 Bean으로 등록할때 사용하는 어노테이션
public class ApplicationConfig {
@Bean //name을 지정하지 않은 경우 메소드명을 camelCase로 변경하여 "array"가 Bean id가 됨.
public ArrayList<String> array(){
return new ArrayList<String>();
}
@Bean(name="myarray")
public ArrayList<String> array2(){
return new ArrayList<String>();
}
}
@Controller
클래스에 사용 시 Spring MVC에서 Controller 클래스로 정의된다.
api와 view를 동시에 사용하는 경우 사용. view (화면) 리턴이 주목적이며,
api메소드를 사용 시에는 메소드에 @ResponseBody 어노테이션을 붙여서 사용한다.
(@Component가 포함되어 있어 bean 등록 대상이 된다. )
@RestController
Spring에서 Controller 중 View로 응답하지 않는 Controller 를 의미한다.
method의 반환결과를 JSON형태로 반환한다.
이 어노테이션이 있는 Controller 클래스의 method 는 HttpResponse로 바로 응답이 가능하다.
메소드에 붙이는 @ResponseBody의 역할을 자동적으로 해주는 어노테이션이다.
(메소드에 @ResponseBody를 별도로 지정해주지 않아도 해당 역할을 수행함.)
view가 필요없는 api만 지원하는 Controller 에서 사용한다.
data(json, xml등) 리턴이 주목적이다.
(@Component가 포함되어 있어 bean 등록 대상이 된다.)
@ResponseBody
@Controller 내 메소드에 view가 아닌 JSON형식의 값을 리턴하고자 할때 붙여서 사용한다.
@Service
Service 클래스에 쓰인다. 비즈니스 로직을 수행하는 class 라는것을 나타내는 용도이다.
(@Component가 포함되어 있어 bean 등록 대상이 된다. )
@Repository
DAO 클래스에 쓰인다. DataBase에 접근하는 method를 가지고 있는 class에서 쓰인다.
(@Component가 포함되어 있어 bean 등록 대상이 된다. )
@Configuration
@Configuration 과 @Bean을 사용하면 특정 클래스를 Bean으로 등록 할 수 있다.
(여기서 빈으로 등록되면 해당 빈을 다른곳에서 쓸때 @Autowired를 생략해도 빈이 주입됨.)
(@Component가 포함되어 있어 bean 등록 대상이 된다. )
@ConfigurationProperties
properties 또는 yaml 파일을 읽는다. default 로 application.yaml 파일을 조회한다.
@Value
properties에서 값을 가져와 적용할때 사용한다.
@Value("${value.from.file}")
@Autowired
속성(filed), setter, method, 생성자에 사용하여, Type에 따라 알아서 Bean을 주입해준다.
(* Bean 이란 스프링컨테이너가 관리하는 자바객체를 말함.)
이 어노테이션을 사용 시 스프링이 자동적으로 값을 할당한다.
Controller 클래스에서 DAO나 Service 에 관한 객체에 빈을 주입 시킬때 많이 사용한다.
@Controller
public Class UserController {
@Autowired
UserService userService;
}
@Qualifier("id123")
@Autowired 와 같이 쓰이며, 같은 타입의 Bean 객체가 두개 이상 있을때 해당 아이디를 적어 원하는
Bean이 주입될수 있도록 하는 어노테이션
@Resources
@Autowired와 Bean 객체를 주입해주는데, 차이점은 Autowired는 타입으로,
Resource는 이름으로 연결해준다.
@Required
setter method에 적용해주면 Bean 생성시 필수 프로퍼티임을 알린다.
@EnableAutoConfiguration
@SpringBootApplication 에 포함되어 있는 어노테이션
Spring Application Context 를 만들때 자동으로 설정하는 기능을 켠다.
만약 tomcat-embed-core.jar 가 존재하면 톰캣 서버가 자동 setting 된다.
@SpringBootApplication
@Configuration, @EnableAutoConfiguration, @ComponentScan 3가지를 하나로 합친 어노테이션이다.
스프링부트 구동시 구동되는 메인 클래스에 적용되어 있다.
@RequestMapping
요청 url을 어떤 method로 처리할지 mapping 해주는 어노테이션이다.
@RequestMapping("/admin", method=RequestMethod.GET)
@RequestMapping("/admin", method=RequestMethod.POST)
@RequestMapping("/admin", method=RequestMethod.PUT)
@RequestMapping("/admin", method=RequestMethod.PATCH)
@RequestMapping("/admin", method=RequestMethod.DELETE)
@GetMapping, @PostMaping, @PutMapping, @PatchMapping, @DeleteMapping
위 메소드 종류에 따른 @RequestMapping을 위 처럼 사용할 수도 있다.
@Scheduled
Linux의 crontab 처럼 정해진 시간에 자동실행 기능 부여
Lombok Annotation 종류
@NoArgsConstructor
기본생성자를 자동으로 추가한다.
@RequiredArgsConstructor
final 로 선언된 필드값만 파라미터로 받는 생성자를 자동 추가한다.
@AllArgsConstructor
모든 필드를 파라미터로 받는 생성자를 추가한다.
@Getter, @Setter
클래스내 모든 필드에 getter 와 setter 메소드 추가
(Entity 클래스에는 Setter를 설정해서는 안됨. 데이터 안전성의 이유 )
@ToString
클래스내 모든 필드에 toString 메소드 자동 생성
@Builder
인스턴스 생성시점에 필드값을 채워준다. 생성자와 비슷하지만,
생성자와 다르게 어떤 필드에 어떤 값을 넣을지를 명확하게 구분하여 입력할 수 있다.
JPA Annotation 종류
@Entity
실제 DB테이블과 매칭될 entity 클래스임을 명시한다.
@Id
엔티티 클래스의 pk필드를 나타낸다.
@GeneratedValue
pk의 생성규칙을 나타낸다. Long type의 Auto_increment 를 적용하면
MySql의 auto increment 와 같은 자동증가하는 정수형 값이 된다.
@Column
엔티티 클래스의 컬럼을 나타내며, 선언하지않아도 엔티티 클래스의 필드는 모두 컬럼이된다.
별도로 기본값외에 컬럼의 타입이나 사이즈를 변경하고자 할때 사용한다.
'SPRING' 카테고리의 다른 글
[springBoot 에러] could not evaluate condition on org.springframework.boot.autoconfigure.jdbc... (0) | 2022.03.14 |
---|