[Spring] 스프링 @(어노테이션) 종류
Spring framework Annotation 개념
XML : 분리
- 결합도를 낮추고 유지보수성을 높이기 위해 xml로 설정하였으나 xml이 너무 많아지면 오히려 유지보수성이 낮아지는 아이러니한 상황 발생
- 유지보수성에 방점
- 시스템 전체에 영향을 주고 이후에 변경 가능성이 있는 것은 xml로 설정.
https://medium.com/@2xel/spring-framework-annotation-%EA%B0%9C%EB%85%90-c26c15716538
@Component
<context:component-scan> 태그를 추가하면 어노테이션이 적용된 클래스를 빈으로 등록하게된다.
<context:annotation-config>태그는 어노테이션과 관련해서 BeanPostProcessor를 함께 등록한다.
@Required(RequiredAnnotationPostProcessor)
@Autowired(AutowiredAnnotationBeanPostProcessor)
@Resource, @PostCounstruct, @PreDestory(CommonAnnotationBeanPostProcessor)
@Configuration(ConfigurationClassPostProcessor)
그 외 Repository, Service, Controller 포함
<context:component-scan base-package="xxx"/>
xxx 패키지 하위에 @Component로 선언된 클래스를 bean으로 자동등록(bean 이름 : 해당클래스 이름, 첫글자 소문자)
@Required
location :setter method
Required는 필수 프로퍼티임을 명시하는 것으로 설정하지 않을 경우 빈 생성시 예외를 발생
public class TestBean{
@Required
private TestDao testDao;
public void setTestDao(TestDao testDao){
this.testDao = testDao;
}
}
RequiredAnnotationBeanPostProcessor 클래스는 스프링 컨테이너에 등록된 bean 객체를 조사하여 @Required 어노테이션으로 설정되어 있는 프로퍼티의 값이 설정되어 있는지 검사한다.
사용하려면 <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" /> 클래스를 빈으로 등록시켜줘야 하지만 이를 대신하여 <context:annotation-config> 태그를 사용해도 된다.
@Autowired
의존관계를 자동설정할 때 사용하며 타입을 이용하여 의존하는 객체를 삽입해 준다. (해당 타입의 빈객체가 존재하지 않거나 또는 2개 이상 존재할 경우 스프링은 예외를 발생시킨다.)
*option
required : 필수여부
@Autowired(required=false)
Test test = new TestTwo();
// bean 객체가 존재하지 않을 경우 testTwo 생성
같은 타입의 빈이 2개 이상 존재하게 되면 예외가 발생하는, 이럴때 @Qualifier를 사용하여 특정빈을 사용하도록 한다.
@Autowired
@Qualifier("test")
private Test test;
@Qualifier
location : with @Autowired
@Autowired 동일 타입의 빈객체가 존재시 특정빈을 삽입할 수 있게 설정
*option
name : alias 명
@Resource
@Autowired와 흡사하지만 @Autowired(by type), @Resource(by name)으로 연결한다는 점이 다르다.
*option
name : 연결될 빈객체 이름 입력 @Resource(name="test")
@Scope
설정 : prototype, singleton, request, session, globalSession
기본적 빈의 범위 "singleton"
@componet
@Scope(value="prototype")
public class User(){}
@PostConstruct
location : 해당 작업 메서드 앞
의존하는 객체를 설정한 이후에 초기화 작업을 수행하기 위해 사용. 스프링에 의해 인스턴스가 생성된 후 어노테이션이 적용된 메서드 호출. CommonAnnotationBeanPostProcessor 클래스를 빈으로 등록(<context:annotation-config> 태그로 대신 가능)
@PostConStruct
public void init(){
Sysout("init...");
}
@PreDestory
location : 해당 작업 메서드 앞
컨테이너에서 객체를 제거하기 전에 해야할 작업을 수행하기 위해 사용
CommonAnnotationBeanPostProcessor 클래스를 빈으로 등록(<context:annotation-config> 태그로 대신)
@Inject
Spring 3부터 지원하는 Annotation. 특정 framework에 종속되지 않은 어플리케이션을 구성하기 위해서 @Inject를 사용할 것을 권장.
@Service
비즈니스로직이 들어가는 Service 빈 등록
@Repository
version : 2.0
일반적으로 DAO에 사용되며 DB Exception을 DataAcessException으로 변환한다.
@Contoroller
pacakge : org.springframework.stereotype
version : 2.5
Spring MVC의 Controller 클래스 선언을 단순화. 스프링 컨트롤러, 서블릿을 상속할 필요가 없으며, @Controller로 등록된 클래스 파일에 대한 bean을 자동으로 생성해준다
(component-scan 이용)
Controller 메서드의 파라미터 타입
파라미터 타입
|
설명
|
HttpServletRequest, HttpServletResponse, HttpSession
|
Servlet API
|
java.util.Locale
|
현재 요청에 대한 Locale 정보
|
InputStream, Reader
|
요청 컨텐츠에 직접 접근할 때 사용
|
OutputStream, Writer
|
응답 컨텐츠를 생성할 때 사용
|
@PathVariable 적용 변수
|
URL 템플릿 변수
|
@RequestParam 적용 변수
|
HTTP 파라미터와 매핑
|
@RequestHeader 적용 변수
|
HTTP 헤더 매핑
|
@CookieValue 적용 변수
|
HTTP 쿠키 매핑
|
@RequestBody 적용 변수
|
HTTP RequestBody에 접근할 때 사용. HttpMessage Converter를 이용해 RequestBody 데이터를 해당 타입으로 변환
|
Map, Model, ModelMap
|
뷰에 전달할 모델 데이터를 설정할 때 사용
|
커맨드 객체(VO)
|
HTTP 요청 파라미터를 저장한 객체, 기본적으로 클래스 이름을 모델명으로 사용
|
Errors, BindingResult
|
HTTP 요청 파라미터를 커맨드 객체에 저장한 결과. 커맨드 객체를 위한 파라미터 바로 다음에 위치한다.
|
SessionStatus
|
폼 처리를 완료 했음을 처리하기 위해 사용 @SessionAttribute를 명시한 session 속성을 제거하도록 이벤트를 발생 |
Controller 메서드의 리턴 타입
리턴 타입
|
설명
|
ModelAndView
|
뷰 정보 및 모델 정보를 담고 있는 ModelAndView 객체
|
Model
|
뷰에 전달할 객체 정보를 담고 있는 Model을 리턴(뷰 이름은 요청 URL로 결정)(RequestToViewNameTranslator를 통해 뷰 결정)
|
Map, ModelMap
|
(RequestToViewNameTranslator를 통해 뷰 결정)
|
String
|
뷰 이름을 리턴 |
View
|
View 객체를 직접 리턴. 해당 View 객체를 이용해서 뷰를 생성
|
void
|
메서드가 ServletResponse나 HttpServletResponse 타입의 파라미터를 갖는 경우 메서드가 직접 응답을 처리한다고 가정. (RequestToViewNameTranslator를 통해 뷰 결정)
|
@ResponseBody 적용
|
@ResponseBody 어노테이션이 적용된 경우, 리턴 객체를 HTTP 응답으로 전송한다. HttpMessageConverter를 이용해서 객체를 HTTP 응답 스트림으로 변환한다.
|
@RequestMapping
@RequestParam
참고 : https://noritersand.tistory.com/156
출처: https://cornswrold.tistory.com/8?category=755359 [평범한개발자노트:티스토리]
'Spring Framework > Spring 입문 - 개념 및 핵심' 카테고리의 다른 글
[Spring] 트랜잭션의 전파 설정별 동작 (0) | 2022.09.21 |
---|---|
[Spring] 필터(filter)와 인터셉터(interceptor)의 차이 (0) | 2022.06.07 |
@Component와 @Bean의 차이 (0) | 2021.10.05 |
[Spring] 스프링 AOP (Spring AOP) 총정리 : 개념, 프록시 기반 AOP, @AOP (0) | 2021.03.15 |
[Spring] 스프링 Expression Language : SpEL (Spring Expression Language) (0) | 2021.03.15 |
[Spring] 스프링 Converter와 Formatter를 이용한 데이터 바인딩(Converter, Formatter : Spring Data Binding) (0) | 2021.03.08 |
[Spring] 스프링 데이터 바인딩 추상화 : PropertyEditor (Spring Editor Binding Abstraction : PropertyEditor) (0) | 2021.01.15 |
[Spring] 스프링 Validation 추상화, Validator( Spring Validation Abstraction, Validator ) (0) | 2021.01.15 |