일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 가로세로세팅
- 홈페이지제작견적
- 3
- https
- SSL
- 특정페이지가로로
- 파푸니카 떠돌이상인
- IT용어
- 욘 떠돌이상인
- PIP모드
- 루테란 떠돌이상인
- SI
- 작은화면
- 아르데타인 떠돌이상인
- 베른 떠돌이상인
- 페이튼 떠돌이상인
- sm
- 이름바꾸기
- 한글
- 유튜브
- 토토이크 떠돌이상인
- 애니츠 떠돌이상인
- 로헨델 떠돌이상인
- 슈샤이어 떠돌이상인
- zoom
- HWP
- SE
- Today
- Total
도담도담
어노테이션 (annotation) 본문
어노테이션 (annotation) 은 메타데이터(metadata) 라고 볼수 있다. 메타데이터는 데이터들을 위한 데이터로써, 컴파일과정이나 런타임과정에서 코드를 어떻게 처리할 것인지 알려주는 정보라고 할 수 있다.
어노테이션의 용도는 크게 3가지로 나타낼수 있다.
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
- 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행시(런타임시)특정 기능을 실행하도록 정보를 제공
@Component
@Component 뒤에 아무것도 안붙이면 자동으로 이름이 부여된다
public class LgTV implements TV { } 부분의
=> LgTV -> "lgTV"
@Autowired
@Autowired 를 이용한 의존성 주입 : 주로 컴포넌트(클래스)의 멤버 변수상단에 사용...
Spring Container는 @Autowired를 만나는 순간 해당 변수의 데이터 타입을 확인
Spring Container의 객체중 해당 타입을 가진 객체를 자동 주입.
@Autowired
private Speaker speaker;
위의 경우 Speaker 타입을 가진 객체를 검색...
검색 결과가 없으면 해당 변수에 객체를 주입할 수 없기 때문에 ... 찾을 수 없다는 예외처리 발생..
(
NoSuchBeanDefinitionException: No matching bean of type [di.anno.Speaker] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=apple)}
)
해결방법1 : 설정파일에 <bean ~~~></base> 태그(엘리먼트)를 이용하여 컨테이너 구동시 자동 생성될 수 있도록 설정
해결방법2 : 해당 타입을 갖는 클래스선언부 위에 @Component를 설정하여 설정 파일의 <context:component-scan ~~></context:component-scan> 에 의해서 자동 검색할 수 있도록 설정...
@Qualifier
@Qualifier 를 이용하는 경우 :
Spring Container 내에 동일한 타입을 갖는 객체가 여러 개일 경우..
특정 객체를 지정하여 Spring Container 가 혼돈하지 않도록 설정..
예) SonySpeaker / AppleSpeaker 이 클래스가 Speaker 인터페이스를 구현받았다고 가정
<bean id="sony" class="di.anno.SonySpeaker"></bean> <== Speaker 타입
<bean id="apple" class="di.anno.AppleSpeaker"></bean> <== Speaker 타입
@Component("tv")
public class LgTV implements TV {
@Autowired => Speaker 타입 객체를 검색
@Qualifier("apple") <== 와 같이 특정 객체를 설정...
private Speaker speaker;
//중략..
}
@Qualifier("apple")을 지정하지 않았을 경우에 발생하는 에러
(
Could not autowire field: private di.anno.Speaker di.anno.LgTV.speaker; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [di.anno.Speaker] is defined: expected single matching bean but found 2: [apple, sony]
)
@Resource
@Resource 를 이용하여 의존성 주입: 객체 이름을 이용하여 주입..
참고: @Autowired는 타입을 이용하여 의존성 주입..
즉, 동일한 타입의 객체가 여러 개일 경우, @Autowired는 @Qualifier("apple")와 같이 추가로 지정해주어야 하지만,
@Resource는 @Resource(name="apple")와 같이 지정할 수 있다..
따라서, @Autowired가 있는 멤버 변수의 타입과 동일한 타입을 갖는 객체가 1개만 조재할 경우에는 @Autowired를 사용.
여러개일 경우에는 @Resource가 편리.
만약 지정한 객체 이름이 없을 경우, 아래와 같이 찾을 수 없다는 예외처리...
(
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'apple1' is defined
)
어노테이션과 XML 설정을 병행하여 사용
1. 특정 컴포넌트에 주입되는 객체가 자주 변경되어야 할 경우에는 <bean ~~></bean> 으로 설정
2. 특정 컴포넌트에 주입되는 객체가 고정일 경우에는
주입되는 클래스에는 @Component 를 설정하고
주입받는 클래스 내부의 변수에는 @Autowired를 이용하여 설정
또는 주입받는 클래스 내부의 변수엔는 @Autowired와 @Qualifier("객체명")를 이용하여 설정
단, ~~.jar 처럼 라이브러리 형태로 제공되는 클래스는 반드시 설정파일 내에 <bean ~~></bean> 의 형태로 설정한다!!
예) 개발자가 선언하는 클래스는 어노테이션 또는 xml 형태를 선택
아파치 톰캣, 스프링 프레임워크가 제공하는 클래스는 반드시 <bean ~~></bean> 으로 지정
스프링이 제공하는 DispatcherServlet 클래스 처럼!!
비지니스 로직실습:
BoardWeb_DI_boardService 프로젝트 생성 후, 불필요한 폴더 및 파일 삭제..
Properties 메뉴에서 자바버전 및 Runtime 을 톰캣으로 설정.. (project facets)
pom.xml 에서 자바버전 및 스프링 릴리즈 수정. (자바 : 1.8 / 스프링 릴리즈 : 4.2.4)
BoardWeb_DI_boardService => src => main => webapp => WEB-INF => lib폴더 생성 => ojdbc8.jar 파일추가..
(공식적으로는 오라클사에서 더이상 pom.xml 에서 사용되는 Dependency를 제공하지 않는다고 해서, 오라클 드라이버 라이브러리는 직접 넣어서 사용.)
Spring 의 비지니스 영역 작업 시,
서비스( 즉, 비지니스 로직 처리 부분) 는 interface를 이용하여 구현한다!
서비스 클래스는 @Service("서비스명")
데이터 접근 클래스(DAO)는 @Repository
파일위치 용도
src/main/java : 완성된 자바 파일
src/main/resource : 앱관련 리소스 (설정파일 등...)
src/test/java : 완성하기 전 자바 테스트 파일
src/test/resource : 완성하기 전 테스츠용 앱관련 리소스 (설정파일 등...)
'IT 공부 > KH 정보교육원' 카테고리의 다른 글
어노테이션을 이용한 MVC (0) | 2021.06.18 |
---|---|
AOP(Aspect Oriented Programming) (0) | 2021.06.17 |
의존성 주입 (DI : Dependency Injection) (0) | 2021.06.16 |
Spring 사용방법 (개념) (0) | 2021.06.15 |
xml 기본 틀 (0) | 2021.06.13 |