일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 이클립스
- JavaScript
- group by
- HTML
- 모조칼럼
- HTTP Status 500
- 과정평가형
- 답변형 게시판
- 부트스트랩
- 한글 인코딩
- git
- alias
- SQL
- ||
- 성적프로그램
- Oracle SQL
- github
- Java
- distinct
- rownum
- CRUD
- tomcat
- sql developer
- JSP
- Oracle DB
- jQuery
- Bootstrap
- 제약조건
- oracle
- HTTP Status 404
Archives
초급의 끄적거림
[Spring] 어노테이션 본문
1. 어노테이션이란
- @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여하는 것
- 기본적인 종류는 한정적, But 본인의 입맛대로 커스텀 어노테이션을 만들어 낼 수 있음
- 클래스나 메소드 위에 쓰면 스프링 프레임워크가 그것을 싱글톤 패턴의 빈 컨테이너로 만들고 생명주기 관리
- 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터 제공 → 코드에 정보를 추가하는 정형화된 방법
2. 어노테이션의 용도
- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도
- 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플렉션을 이용하여 특수 기능을 추가하기 위함
- 컴파일 과정에서 어노테이션 정보로부터 코드를 생성하기 위한 용도
3. @Autowired
- 의존 자동 주입 : 자동 주입 기능을 수행. 설정 파일에 의존 객체를 명시하지 않아도 스프링이 필요한 의존 빈 객체를 찾아서 주입
- 방법 1) 자동 주입 대상에 @Autowired 어노테이션 사용
: @Autowired 어노테이션이 적용된 의존 대상은 XML 설정에서 의존 주입 관련 설정을 하지 않아도 됨
- 방법 2) XML 설정에 <context:annotation-config/> 설정 추가
- @Service 어노테이션과 함께 스프링 기동시 Bean 객체로 등록된 해당 서비스는 @Autowired 어노테이션에 의해 Setter가 생성되며 해당 객체가 자동으로 주입되는 의존성 주입 형태로 변경
- 사용방법 1) 생성자에 적용 2) 필드에 적용 3) 설정 메서드에 적용
- Q0) 왜 abstract class 와 함께 적히면 안되는가
- Q1 ) 스프링이 어떻게 알아서 처리하는 건가
: @Autowired 어노테이션을 사용하면 스프링은 '타입'을 이용해서 의존 대상 객체를 검색
: 즉. 해당 타입에 할당할 수 잇는 빈 객체를 찾아서 주입 대상으로 선택
- Q2) 만약 동일한 타입을 가진 빈 객체가 두 개라면?
: 같은 타입의 빈이 두 개 이상이 존재할 경우에는 스프링이 어떤 빈을 주입해야 할지 알 수가 없어서 스프링 컨테이너를 초기화 하는 과정에서 Exception을 발생시킨다
: @Autowired의 주입 대상이 한 개여야 하는데 실제로는 두 개이상의 빈이 존재하여 주입할 때 사용할 객체를 선택할 수 없기 때문 → 해결방법 : @Qualifier 어노테이션 사용
4. @Qualifier
- 같은 타입의 빈이 두 개 이상이 존재하는 경우 스프링이 어떤 빈을 주입해야 할 지 알 수 없어서 스프링 컨테이너를 초기화 하는 과정에서 예외 발생
- 이 때 @Qualifier을 @Autowired와 함께 사용하여 정확히 어떤 bean을 사용할지 지정하여 특정 의존 객체를 주입할 수 있게함
5. @Component
- component-scan을 선언하여 특정 패키지 안의 클래스들 스캔, @Component Annotation이 있는 클래스에 대하여 bean 인스턴스 생성
6. @Controller, @Service, @Repository
- @Componente -구체화 → @Controller, @Service, @Repository
- bean으로 등록
- 해당 클래스가 Controller/Service/Repository로 사용됨을 스프링 프레임워크에 알림
7. @RequestMapping
- @RequestMapping에 대한 모든 매핑 정보는 스프링이 제공하는 HandlerMapping Class가 가짐
- value : 해당 url로 요청이 들어오면 이 메서드가 수행
- method : 요청 method를 명시, 없으면 모든 http method 형식에 대해 수행
8. @RestController
- @Controller + @ResponseBody
- @ResponseBody를 모든 메소드에서 적용
- 메소드의 변환 결과 (문자열)을 JSON형태로 반환
9. @Required
- setter method에 사용
- 영향을 받는 bean property 구성 시, XML설정 파일에 반드시 porperty로 채워야함
+) JAVA 기본 어노테이션 (JDK에서 제공)
- @Override : 해당 메소드가 부모 클래스에 있는 메소드를 재정의했다는 것을 명시적으로 선언
- @Deprecated : 더이상 사용되지 않는 클래스나 메소드 앞에 추가
- @SuppressWarnings : 프로그램에는 문제가 없는데 간혹 컴파일러가 경고를 뿜을 때가 있는데 이를 무시하라고 알려줌
'JAVA' 카테고리의 다른 글
[Eclipse] SVN 싱크맞추기 (2) | 2020.01.14 |
---|---|
[Eclipse] 이클립스 SVN 명령과 Ignore Pattern (0) | 2020.01.10 |
[Base64] base64 암호화 복호화 (0) | 2019.11.28 |
[Ecilpse 오류] save could not be completed (0) | 2019.11.25 |
[JAVA] 반복문 (While / For문) / 배열 Array (0) | 2019.10.11 |
Comments