스프링의 특징인 의존성 주입 방법
의존성 주입 : 클래스간의 의존관계를 스프링 컨테이너가 자동으로 연결해주는 것
1) Setter Injection : setter/getter 메서드의 setter 메서드를 통해 의존관계에 있는 객체를 주입
- <property> 태그를 통해 의존관계에 있는 bean을 주입
- ref 속성 : Bean의 레퍼런스를 주입하고자 하는 경우 사용하는데, 스프링이 Bean id를 통해 Bean을 찾아 주입
- value 속성 : 관련 객체가 아닌 단순 값을 주입하고자 하는 경우
@Resource어노테이션은 변수와 세터 메서드를 빈 이름(name)으로 자동연결합니다. 그러나 여러 인수를 받는 메서드 등의 경우에는 @Resource를 사용할 수 없습니다.
2) Constructor injection : 생성자를 통해 의존 관계에 있는 객체를 주입
- 생성자를 통해 의존관계가 있는 객체를 주입하는 경우 <constructor arg > 태그를 사용
타입(Type)을 이용해 주입하는 방법으로
@Autowired 가 Type으로 찾아서 주입하므로 동일한 Bean 타입의 객체가 여러개 있을 경우, Bean을 찾기 위해 @Qualifier 어노테이션을 같이 사용
<context:component scan > 태그
@Autowired로 의존 관계를 주입받을 경우, 해당 클래스(@Autowired당하는 클래스)를 반드시 Component Auto Scanning을 설정 필수
<context:component-scan base-package="factory.userfactory" />
Setter와 Constructor 의존성 주입 차이
(1) 의존성 주입 : @Autowired 는 타입, @Resource는 이름으로 의존성을 주입
(2) 적용 위치 : @Autowired 는 변수, 생성자, Setter메서드, 일반 메서드 등에 적용 가능하지만, @Resource는 변수, Setter메서드등에 적용 가능
(만약 bean이 Map타입인 경우, @Autowired 애노테이션이 제대로 작성하지 않기 때문에 @Resource 사용)
@Autowired와 함께 쓰이는 @Qualifier의 특징과 사용
1) 유일한 빈 구별 : @Autowired로 연결한 빈 목록에서 유일한 빈을 구별합니다. @Qualifier(value ="빈이름")
스프링 컨테이너가 @Autowired 를 설정한 필드, 생성자 등 타입으로 후보 빈을 찾는데, 그 후 @Qualifier를 통해 유일한 빈을 구별합니다.
2) 타입 지정 : 연결할 빈의 값 타입을 지정합니다. @Qualifier("serviceName")
연결할 빈의 타입을 지정한 경우 springbeans.xml에 선언한 이름을 작성해줍니다.
> Qualifier
@Autowired
@Qualifier("abService")
> springbeans.xml
<bean id="abService" class="spring.service.ABService"></bean>
<bean id="bcService" class="spring.service.BCService"></bean>
'Server Programming > Spring Boot Full-Stack Programming' 카테고리의 다른 글
[스프링 풀스택 클론 코딩 - 회원가입] (1-4) 회원가입 뷰 (0) | 2022.08.26 |
---|---|
[스프링 풀스택 클론 코딩] 회원가입 페이지 만들기 (+ 부트스트랩, 자바스크립트, 롬복, 타임리프) (0) | 2022.08.26 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-3) 회원가입 컨트롤러 (0) | 2022.08.25 |
[스프링 풀스택 클론 코딩] JPA 즉시로딩과 지연로딩 (0) | 2022.08.24 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-2) 계정 도메인 (0) | 2022.08.24 |