티스토리 뷰

study/springboot

005. Spring annotaion

까오기 2022. 5. 11. 11:17

Stereotype-annotation 

 Annotation  역할
 @Component  Spring에서 Annotation 기반으로 자동으로 Dependency Injection을 하는  @Controller, @Service, @Repository, @Configuration은 모두 @Component이고 이를 확장하여 사용하는 것으로 최상위 개념이다.   
 @Controller  Controller 명시, Presentation Layer에서 사용
 @Service  Service 명시, Business Layer에서 사용
 @Repository  DAO 명시, Persistence Layer에서 사용
@Configuration 설정 관련 bean

알고 보면 모두 @Component이지만 역할에 따라 다른 이름으로 구분함으로써 각각에 역할을 부여하거나 AOP를 통해 처리하기 위함이다. 

가급적 @Component를 사용하기 보다 하위 Annotation을 사용하는게 좋다. 

@Component Versus @Bean 

@Component는 선언된 클래스를 Spring Bean으로 만드는 것이고 @Bean은 반환하는 객체를 Bean으로 만드는 것이다. 

@Bean
public TaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(10);
    taskExecutor.setMaxPoolSize(20);
    taskExecutor.setQueueCapacity(50);
    return taskExecutor;
}

@Bean은 위에서 처럼 return에 Bean을 반환한다. 

@Autowired , @Resource 차이 

@Autowired

스프링 표준 어노테이션이다. 

Type-driven Injection이 기본이다. (byType)

동일 타입이 복수개인 경우 Qualifier를 사용하여 구분한다. 

@Autowired
@Qualifier("productService")

사용되는 위치

생성자, 프라퍼티, 메소드, Dependency Injection 이 후 사용자 처리를 위해서 프라퍼티 보다 메소드에 사용하는 것을 권장한다. 

필수가 아닌 경우의 처리 

@Autowired(required=false)

@Resource

java 표준 어노테이션

Name 기반 Injection 처리(byName)

@Resource(name="productService")

사용하기 위해서는 JSR 250 의존 라이브러리 필요

 

둘의 역할은 비슷하나 java 표준을 사용할지 Spring 표준을 따를지에 대한 고려와 기본 로직이 Type인지 Name인지를 알고 쓰는 게 중요하다. 

@Value

Property 파일의 내용을 Injection한다. 

@Value("${upload.resource.location}")

private String uploadResourceLocation;

 

그외 Annotions 

@ResponseBody

컨트롤러에서 사용이 되면 결과 값이 Json 형태로 변환된다. 

@RestController를 사용하지 않는 일반 컨트롤러에서 Json 형태로 결과를 내려 줄 때 사용한다. 

@RequestBody

Form에서 key,value 형태가 아닌 Json으로 된 형태 등이 전달 되면 이 어노테이션을 통해 처리 할 수 있다. 

@Scope

Bean Scope 정의

singleton : Spring 기본 Scope, 한번만 인스턴스가 생성된다. 

prototype : 요청 할 때 마다 생성

request : 하나의 Request에 하나의 인스턴스 

session : 세션 당 하나의 인스턴스 생성

globalSession : 전역 세션 스코프에 따라 인스턴스 생성

@Scope("prototype");

@PostConstruct 

객체 생성 이후 초기화 작업을 수행하고 할때 메소드에 정의 

Injection 이 후 별도 처리를 하고자 하거나 특정 처리를 원할 때 사용. 

@ComponentScan

Application.java, Configuration 등에서 사용하는 annotation으로 특정 패키지를 설정해 줄 때 사용.  

@ComponentScan(basePackages={"eblo.study.springboot", "eblo.study.common"})

'study > springboot' 카테고리의 다른 글

007. 기본 설정 추가 및 실행  (0) 2022.05.11
006. 사용자 배너 추가  (0) 2022.05.11
004. 롬복(lombok)  (0) 2022.05.11
003. 스프링부트 프로젝트 구조 이해  (0) 2022.05.11
002. 프로젝트 생성  (0) 2022.05.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함