❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
그래 아직 포기하지 마!
난 스프링을 이번에 처음 접한 거라 그럴 수 있어!
지금까지 해온 것처럼 차근차근 다시 쌓아보자!
수업 시작 전
웹브라우저 : 크롬
스프링 : 서버를 사용함
was : 아파치톰캣
빌드툴 : 메이븐
DB접속하는 서비스 : Mybatis
was에서 context path : 구성요소 패스
클라이언트가 서버에 요청 시 전달하는 것
URL(요청) , Method(요청하는 방법) , pramater(요청된 값)를 보낸다
MVC처리과정 재정리
파일구조 재확인
- 학원(이클립스) 파일
의존 객체 자동 주입(Automatic Dependency Injection)
의존 객체 자동 주입(Automatic Dependency Injection)은 스프링 설정파일에서
혹은 태그로 의존 객체 대상을 명시하지 않아도 스프링 컨테이너가 자동적으로
의존 대상 객체를 찾아 해당 객체에 필요한 의존성을 주입하는 것을 말한다.
@Resource, @Autowired, @Inject
이 태그들의 차이점은 의존 객체를 찾는 방식이 다르다.
@Resource
Java에서 지원하는 어노테이션입니다. 특정 프레임 워크에 종속적이지 않다.
찾는 순서 : 이름 -> 타입 -> @Qualifier -> 실패
name 속성의 이름을 기준으로 찾습니다.
없으면 타입, 없으면 @Qualifier 어노테이션의 유무를 찾아 그 어노테이션이 붙은 속성에 의존성을 주입한다.
context:annotation-config/ 구문을 꼭 xml 설정파일에 추가해야 한다.
사용할 수 있는 위치 : 멤버변수, setter 메서드
@Autowired
Spring에서 지원하는 어노테이션입니다.
찾는 순서 : 타입 -> 이름 -> @Qualifier -> 실패
@Autowired는 주입하려고 하는 객체의 타입이 일치하는지를 찾고 객체를 자동으로 주입한다. 만약에 타입이 존재하지 않는다면 @Autowired에 위치한 속성명이 일치하는 bean을 컨테이너에서 찾는다. 그리고 이름이 없을 경우 @Qualifier 어노테이션의 유무를 찾아 그 어노테이션이 붙은 속성에 의존성을 주입한다.
context:annotation-config/ 구문을 꼭 xml 설정파일에 추가해야 한다.
사용할 수 있는 위치 : 멤버변수, setter메서드, 생성자, 일반 메서드에 적용가능
@Inject
Java에서 지원하는 어노테이션입니다. 특정 프레임 워크에 종속적이지 않다.
찾는 순서 : 타입 -> @Qualifier-> 이름 -> 실패
@Aurowired와 동일하게 작동하지만 찾는 순서가 다릅니다.
@Inject를 사용하기 위해서는 maven이나 gradle에 javax 라이브러리 의존성을 추가해야 한다.
사용할 수 있는 위치 : 멤버변수, setter 메서드, 생성자, 일반 메서드에 적용 가능
@Qualifier
만약에 타입이 동일한 bean객체가 여러 개 있으면 Spring이 Exception을 일으킨다.
(ex…@Autowired를 동일한 타입에 쓴 곳이 있다면)
스프링이 어떤 bean을 주입해야 될지 모르기 때문에 스프링 컨테이너를 초기화하는 과정에서 Exception
@Autowired의 주입 대상이 한 개여야 하는데
실제로는 두 개 이상의 빈이 존재해 주입할 때 사용할 객체를 선택할 수 없기 때문이다.
단, @Autowired가 적용된 필드나 설정 메서드의 property 이름과 같은 이름을 가진 빈 객체가 존재할 경우에는 이름이 같은 빈 객체를 주입받는다.
아무것도 몰랐을 때는 이걸로 문제가 발생한 적이 있는데 왜 그런지 몰라서 시간 좀 잡아먹었다 ;;
이럴 때 @Qualifier를 쓰면 해결해 줄 수 있다. 한정자를 설정해 준다.
<context:annotation-config>
<-- Member member = new Member() -->
<bean id="member1" class="example.Member">
<qualifier value="m1"/>
</bean>
<context:annotation-config/>
이런 식으로 qualifier를 추가해 준다.
pubic class MemberDao{
@Autowired @Qualifier("m1")
private Member member;
public void setMember(Member member){
this.member = member;
}
}
@Qualifier(“m1”)이라고 해줬으니 member1 bean을 쓰겠다는 것이 되는 것이다.
👩🏻💻 Exception
@Qualifier에 지정한 한정자 값을 갖는 bean 객체가 존재하지 않으면 Exception이 발생한다
'🌱 𝐅𝐫𝐚𝐦𝐞𝐰𝐨𝐫𝐤 > ⠀⠀⠀⠀ Sᴘʀɪɴɢ' 카테고리의 다른 글
20231228🌱 게시판 만들기 (0) | 2024.01.01 |
---|---|
20231227🌱 즐겨봐요 봄날의 스프링 (0) | 2023.12.28 |
20231222🌱 Bean, Container, DI, Mapper, Mybatis (1) | 2023.12.27 |
20231221🌱 멘붕의 시작, 클라이언트에 대해 (0) | 2023.12.27 |
20231220🌱 SringFramework을 시작하다 (1) | 2023.12.27 |