Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬
- 백준 16935
- 카카오
- leetcode
- 자바 리트코드
- 코테
- 그래프 자바
- 프로그래머스
- 리트코드 1557
- BFS
- 프로그래머스 java
- 자바 5464
- leetcode 1721
- DP
- 백준
- 스택
- Java
- 코딩테스트
- 분할정복
- 리트코드 자바
- 스프링 에러
- daily challenge
- dfs
- 자바
- 백준 18222
- java 프로그래머스
- 리트코드
- 구현
- 인텔리제이 에러
- java leetcode
Archives
- Today
- Total
레벨업 일지
[Annotation] @란? 본문
Annotation 이란
- 스프링 부트 코드를 보면 @ 기호가 보이는데 Annotation 이라 불린다.
- Annotation 은 영어 뜻으로 주석 이지만, Java 에서는 단순한 주석이 아니다.
- 프로그램에 데이타를 제공하는 메타데이타이다.
- Annotation으로 Bean을 주입하기도 하고 , getter 와 setter을 자동으로 생성
- 장점 : 코드량이 감소하고 생산성 향상
스프링 프레임워크 어노테이션 종류
- Spring Core Annotations
- Spring Web Annotations
- Spring Boot Annotations
- Spring Scheduling Annotations
- Spring Data Annotations
- Spring Bean Annotations
참고
https://www.geeksforgeeks.org/spring-core-annotations/
Annotation과 역할
자주 보이는 Annotatoin 을 간략히 설명하겠다.
@Component
- Component 어노테이션 가진 클래스를 스프링 프레임워크의 "컴포넌트"임을 명시한다.
- 클래스를 스프링의 Bean으로 등록할 때 사용하는 Annotation이다.
- classpath 스캐닝과, annotation-based configuration 을 사용할 때 감지된다.
- classpath scanning : 스프링이 관리할 클래스들을 스캔하는것.
- annotation-based configuration : 자바 빈 컴포넌트들을 xml에 등록하지 않고 Annotation을 사용하여 등록하는 것.
- 문서 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html
- 코드 예시
@Component(value="star")//id = star로 세팅된 bean 등록
public class Man {
public Man() {
System.out.println("hi");
}
}
@ComponentScan
- 스프링 빈(Bean)으로 등록될 준비가 된 클래스들을 스캔해 빈으로 등록해 주는 과정
- 스캔대상 : @Compoenent 가 붙은 모든 annotation. 또는 xml component-scan 태그를 찾아, application context에
- @Configuration, @Service, @Repository, @Controller과 같 @Component가 포함된 어노테이션 모두 다 스캔 대상이다.
- XML <context:component-scan base-package=""/> 태그도 스캔대상.
- 문서 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html
@Bean
- 스프링 IOC 컨테이너가 관리할 빈으로 등록
- Bean의 name 속성을 적어주면 bean id로 등록된다.
- 개발자가 제어가 불가능한 외부 라이브러리 같은 것들을 Bean으로 만들 때 사용
- 문서 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Bean.html
- 코드 예시
@Bean({"b1", "b2"}) // b1 또는 b2로 빈 액세스 가능. 근데 myBean으론 빈 액세스 불가능
public MyBean myBean() {
// instantiate and configure MyBean obj
return obj;
}
@RequestHeader
- Request의 header값을 가져오며, 해당 Annotaion을 사용한 메서드의 파라미터에 사용
@ModelAttribute
- 클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(바인딩)합니다.
- RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형식이다
- @RequestBody가 json을 받는 것과 달리 @ModenAttribute의 경우에는 json을 받아 처리할 수 없다
@RequestMapping
- @RequestMapping(value=”“) 포맷으로 작성하며, URI 요청과 value 값이 일치하면 해당 클래스나 메서드가 실행된다.
- Controller 객체 안의 메서드와 클래스에 적용 가능.
- Class에 사용되면 하위 메서드에 모두 적용
- 메소드에 적용되면 해당 메서드에서 지정한 방식으로 URI를 처리합니다
@Controller
- 컨트롤러를 가진 클래스는 컨트롤러 역할을 수행하도록 지시한다.
- 클래스에만 사용 가능.
- 스테레오타입 어노테이션
- 디스패처가 컨트롤러 어노테이션 같은 스테레오타입 어노테이션을 스캔하고, @RequestMapping을 감지한다.
- 예시 코드
@Controller //이 클래스는 컨트롤러 역할을 합니다.
@RequestMapping("/user") // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {
/*
field dependency injection 입니다.
개발자가 userService 인스턴스를 생성하지 않고
스프링이 자동으로 생성하고 관리합니다.(의존성 주입)
*/
@Autowired
private UserService userService;
@RequestMapping(value = "/users", method = RequestMethod.GET)//URI 가 users로 끝나는get request를 받습니다.
public String list(Model model) {
model.addAttribute("users", userService.findAll());
return "user-list";
}
@RequestMapping(value = "/users", method = RequestMethod.POST)//URI 가 users로 끝나는post request를 받습니다.
public String create(@ModelAttribute User user) {
userService.create(user);
return "redirect:/users";
}
}
@SpringBootApplication
- 컴포넌트 스캐닝, autoconfiguration , property 지원을 가져오는 메타 어노테이션
@GetMapping
- RequestMapping(Method=RequestMethod.GET)과 같다.
@PostMapping
- RequestMapping(Method=RequestMethod.POST)과 같다.
@RestController //@controller + @ResponseBody 합친 annotation입니다.
@RequestMapping("/api") //api로 끝나는 경로를 받습니다.
public class GetController {
...
@GetMapping("/hi") //api/hi 경로를 받습니다.
public String getParameter() {
return "Hello Spring";
}
@PostMapping("/postMethod") //post 통신을 받습니다.
public String postMethod() {
return "OK";
}
}
참고
https://melonicedlatte.com/2021/07/18/182600.html
'JAVA > spring' 카테고리의 다른 글
[에러] - 인텔리제이 스프링 JSTL 500 에러 (0) | 2023.06.12 |
---|---|
[에러] 스프링 java 버전 에러 (0) | 2023.02.23 |
[에러] cannot resolve symbol 'validation' (1) | 2023.02.07 |
[에러] error: variable name not initialized in the default constructor (0) | 2023.02.07 |
[에러] failed :compileJava (0) | 2023.02.07 |
Comments