안녕하세요. IT 이곳 저곳을 여행하고 있는 IT여행자입니다. 이번 여행자 수첩에서는 스프링에서 주로 사용하고 있는 어노테이션 몇가지를 정리해 보려 합니다. 그럼 시작해 볼까요~~
spring에서 사용하는 어노테이션들은 굉장히 다양하다. 그중에 자주 사용하는 어노테이션을 정리하였다. annotation이란 자바의 메타데이터로 컴파일할 때 그 기능을 주입하는 역활을 한다.
1. @Bean
이미 만들어진 클래스를 빈으로 등록하기 위해 지정한다.
@Bean
@Bean(name="id명")
- name이 지정되면 지정된 "id명"으로 빈을 등록할 수 있다.
아래의 코드는 Config 클래스에서 빈을 등록하고 있는 모습이다.
@Configuration
public class AppConfig {
@Bean(value = "myBean")
public BeanInterface getMy() { return new MyBean(); }
@Bean(value = "yourBean")
public BeanInterface getYour() { return new YourBean(); }
}
----------------------------
@Component
public class BeanTest {
@Autowired()
BeanInterface myBean;
public BeanTest() {
System.out.println("BeanTest.....");
}
@PostConstruct
public void output() {
myBean.msg();
}
}
- 출력 결과는 MyBean안에 있는 msg()메서드가 실행되는것을 알 수 있다.
2. @Component
자바클래스를 스프링이 사용할 수 있는 빈으로 등록시켜준다. 클래스를 정의할 때 지정한다.
@Compoment
@Compoment(value="myBean")
@Component
public class BeanTest {
String id;
int age;
public BeanTest() {
System.out.println("BeanTest.....");
}
}
- 스프링이 시작되면 빈이 등록되어 콘솔창에 생성자에 쓰여진 내용이 출력된다.
하나의 interface를 구현한 두 개 이상의 클래스를 구분하여 주입받는 예이다.
public interface BeanInterface {
public void msg();
}
--------------------
@Component(value = "myBean")
public class MyBean implements BeanInterface{
public MyBean() {
System.out.println("MyBean.....");
}
@Override
public void msg() {
System.out.println("MyBean.msg()....");
}
}
----------------------------
@Component(value = "yourBean")
public class YourBean implements BeanInterface{
public YourBean() {
System.out.println("YourBean.....");
}
@Override
public void msg() {
System.out.println("YourBean.msg()....");
}
}
--------------------------------
public class BeanTest {
@Autowired()
BeanInterface yourBean;
public BeanTest() {
System.out.println("BeanTest.....");
}
@PostConstruct
public void output() {
yourBean.msg();
}
}
YourBean안에 있는 msg()가 실행되는것을 확인할 수 있다. @PostConstruct 어노테이션은 사용하려는 빈의 생성자가 실행된후 해당 메서드가 실행되도록 조치해 주는 어노테이션이다.
3. @CompomentScan
@Compoment, @Serivce, @Repository, @Controller, @Configuration으로 설정된 클래스들을 찾아 빈으로 등록한다. 단, @CompomentScan 어노테이션이 붙은 클래스의 패키지 하위에 존재하는 클래스들을 대상으로 한다.
4. @Configuration
spring에서 사용하는 빈들을 등록하는 config 클래스를 만들어 준다.
@Configuration
public class AppConfig {
@Bean(value = "myBean")
public BeanInterface getMy() { return new MyBean(); }
@Bean(value = "yourBean")
public BeanInterface getYour() { return new YourBean(); }
}
5. @Controller , @RestController
해당 클래스를 컨트롤러로 등록한다. 컨트롤러 클래스들은 사용자의 요청처리를 전달받는 클래스들을 의미한다. @RestController는 웹과 관련하여 보다 편리한 기능들을 추가로 제공한다.
6. @RequstMapping
사용자의 요청처리와 같은 값일 때 해당 클래스나 메서드가 실행된다.
@RequestMapping("요청값")
@RequestMapping(value="요청값")
@RequestMapping(value="요청값", method={RequestMethod.POST , RequestMethod.GET})
사용자로부터 "/"가 요청되면 MyClass가 실행된다.
@RequestMapping("/")
public class MyClass{ ... }
사용자로 부터 "/"가 요청되면 myMethod()가 실행된다.
@RequestMapping("/")
public void myMethod(){ ... }
7. @RequestBody
클라이언트가 보낸 데이터의 형식을 JSON이나 XML 또는 기타 Object 타입으로 받을 수 있도록 해준다. 그러나 실제로 spring boot에서는 @Controller보다 @RestContoller를 사용하게 되면 따로 @RequestBody를 선언할 필요가 없다.
@Controller
@RequestBody
public class MyController{ ... }
8. @ModelAttribute
클라이언트로 부터 multipart/form-data 형태로 값이 전달되었을 때 데이터를 지정된 객체에 연결해 준다.
public void multi(@ModelAttribute AttFile attFile)
public void multi(@ModelAttribute("myFile") AttFile attFile)
"myFile" 처럼 이름이 지정된 경우 "myFile" 속성값으로 사용자에게 리턴된다.
9. @RequestParam
웹에서 전달한 파라메터변수값을 다른 이름의 객체에 전달하고자 할 때 사용.
public void method(@RequestParam("abc") String name){ ... }
- 파라메터 abc를 name변수로 바꾸어서 사용하도록 한다.
10. @Autowired
등록된 bean을 자동으로 주입받게 하는 기능을 한다. 빈을 주입하는 방법은 먼저 클래스의 유형이 같은것( byType)을 주입하고 같은게 없으면 변수명과 같은 빈(byName)을 주입하게 된다.
11. @GetMapping | @PostMapping
각각 @RequestMapping(method='GET') 과 @RequestMapping(method='POST') 와 같은 의미이다.
12. @Order
빈의 생성 순서를 정할 수 있다.
@Order(1) or @Order(value=1)
public class First{ ... }
@Order(2)
public class Second{ ... }
- First 클래스가 먼저 생성되고 Second 클래스가 나중에 생성된다.
13. @PostConstruct
@Autowire등으로 참고하고 있는 빈이 생성되었을 때 실행되는 메서드를 만들수 있다. 빈을 주입받는 클래스의 생성자에는 사용할 수 없고, 일반 메서드에 붙여 사용한다.
Other o;
@PostConstruct
public void method(){
o.msg();
}
- method()를 실행하기전 Other 클래스의 생성자를 먼저 실행하여 객체가 생성되도록해 준다.
14. @Qualifier
주입되는 빈의 모호성을 해결하기 위해 사용된다.
빈을 등록할 때
@Qualifier("my")
public class My implements Human{ ... }
@Qualifier("you")
public class You implements Haman{ ... }
등록된 빈을 사용하려 할 때
@Qualifier("my")
@Autowired
Haman my; // My 클래스가 주입됨
15. @Primary
빈 생성시 어느 한쪽이 다른한쪽의 빈의 기반이 될 때 항상 먼저 생성되어야 할 빈에 붙여준다.
16. @SpringBootTest
spring boot test에 필요한 의존성을 제공해 준다.
17. @Test
jUnit에서 테스트할 대상을 표시한다.
이상으로 주로 많이 사용되는 어노테이션들의 종류와 특징을 간단히 알아보았다. 계속해서 즐거운 IT여행이 되시길 바랍니다.
'BOOKS > Spring Boot' 카테고리의 다른 글
Spring Boot에서 WebSocket 만들기 (4) | 2022.01.02 |
---|---|
이클립스를 사용한spring boot mybatis 설정 (0) | 2021.12.24 |
Spring Boot에서 MVC 초간단 설정 (0) | 2021.12.24 |