티스토리 뷰
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
- java
- cache
- oracle
- 엑셀
- spring
- 스프링
- 스프링부트
- 그리드
- mapToList
- Spring Boot
- listToMap
- AG-GRID
- springboot
- 설정
- SHEETJS
- ag grid
- UI
- 예제
- lombok
- thymeleaf
- REST
- RESTful
- 샘플
- sample
- restful서비스
- 타임리프
- 메시지
- example
- mybatis
- Javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |