- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공
- 빌드 또는 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행 시 특정 기능을 실행하도록 정보 제공
- 어노테이션 사용 순서 : 어노테이션 정의 - 클래스에 어노테이션 배치 - 코드 실행 중 Reflection을 이용해 추가 정보를 획득하여 기능 실시
@ComponentScan
- @Component와 @service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean을 찾아 Context에 bean을 등록해준다.
- 자동 등록되는 Bean의 이름은 클래스의 첫문자가 소문자로 바뀐 이름이 자동적용된다.
@Component
- 개발자가 직접 작성한 클래스를 Bean으로 등록하기 위한 어노테이션
- component에 대한 추가 정보가 없다면 클래스의 이름을 camelCase로 변경한 것이 Bean id로 사용된다.
- value를 이용해 Bean의 이름 지정
@Bean
- 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들려할 때 사용되는 어노테이션
- @Bean에 아무런 값을 지정하지 않으면 method의 이름을 camelCase로 변경한 것이 Bean id로 사용된다.
- name을 이용해 Bean의 이름 지정
@Autowired
- 속성, setter method, constructor(생성자)에서 사용.
- 무조건적인 객체에 대한 의존성 주입.
- Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용.
@Inject
- Autowired 어노테이션과 비슷한 역할.
@Controller
- Spring의 Controller의미.
- Spring MVC에서 Controller클래스에 쓰임.
- API와 View를 동시에 사용하는 경우에 사용
- API 서비스로 사용하는 경우 @ResponseBody를 사용하여 객체 반환
- View return이 목적
@RestController
- View가 필요없는 API만 지원하는 서비스에서 사용
- HttpResponse로 바로 응답 가능
- @ResponseBody 역할을 자동적으로 해줌. (@Controller + @ResponseBody)
- data(json, xml 등) return이 목적
@ResponseBody
- HttpMessageConverter를 이용해 JSON 또는 xml로 요청에 응답할 수 있게 해준다.
- RestController 어노테이션이 붙어 있다면, 쓸 필요 없다.
- 단순 컨트롤러이라면 HttpResponse로 응답할 수 있게 해준다.
@RequestBody
- POST나 PUT, PATCH로 요청을 받을 때, 요청에서 넘어온 body 값들을 자바 타입으로 파싱
@Service
- Service 클래스에서 사용
- 비즈니스 로직을 수행하는 클래스라는 것을 나타내는 용도
@Repository
- DAO 클래스에서 사용
- 데이터베이스에 접근하는 메소드를 가지고 있는 클래스
@Required
- setter method에 사용
- @Autowired 어노테이션이 적용된 대상에 의존 객체가 주입되지 않는 경우 false로 지정
@Qualifier
같은 타입의 bean이 여러 개 인 경우 사용할 의존 객체 선택 가능. 자료형 타입에 대한 의존 주입.
생성자에는 사용 불가능. Setter 메소드만 가능.
<bean>태그 내에 <qualifier value="id"/> 설정
@Autowired
@Qualifier(“id”)
@Resource
이름에 따른 의존 주입.
XML설정에 <context:annotation-config /> 설정 추가
@Resource(name=”id”)
@RequestMapping
- Spring의 Controller 또는 그 메소드의 URI 지정
- GET, POST, PATCH, PUT, DELETE 정의 (요청 받는 형식)
- 요청 받는 형식을 정의하지 않는 경우 GET으로 자동 설정.
ex) @RequsetMapping(value = "/test", method = RequestMethod.POST)
-> value : 해당 URI로 요청이 들어오면 이 메소드 수행
method : 요청 method 명시. 명시되어있지 않다면, 모든 http method 형식에 대해 수행
@Transactional
Reflection
- 자바에서 제공하는 API
- 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법
- 개발자가 클래스의 구조 확인 가능
- 구체적인 클래스 타입을 알지 못해도, 클래스, 인터페이스, 메소드 찾기, 객체 생성, 변수 변경, 메소드 호출을 가능하게 해준다.
- 런타임 시에 개발자가 등록한 Bean을 애플리케이션에서 가져와 사용할 수 있다.
- 클래스 정보 가져오기 : Class c = class.getClass();
- 필드 리스트 가져오기 : Field[] fields = class.getDeclaredFields(); | Field[] fields = class.getFields();
method를 활용한 클래스 반환
- class.getSuperClass() : 슈퍼 클래스를 반환
- class.getClass() : 상속된 클래스를 포함하여 모든 공용 클래스, 인터페이스 및 열거형을 반환
- class.getDeclaredClass() : 명시적으로 선언된 모든 클래스 및 인터페이스, 열거형을 반환
- class.getDeclaringClass() : 클래스에 구성된 클래스(명시적으로 선언된)를 반환
- class.getEnclosingClass() : 클래스의 즉시 동봉된 클래스를 반환
'Backend' 카테고리의 다른 글
No converter for [...] with preset Content-Type 'null' (0) | 2024.03.25 |
---|---|
spring boot 프로젝트 만들기 (intellij) (0) | 2024.03.20 |
Spring, tomcat, jsp 프로젝트 생성 (0) | 2024.02.20 |
용어 정리 (0) | 2023.06.01 |
Spring Framework (0) | 2023.06.01 |